public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
wClient = new WebClient();
wClient.Encoding = Encoding.UTF8;
wClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wClient_DownloadStringCompleted);
}
private void Form1_Load(object sender, EventArgs e)
{
}
WebClient wClient;
string sourceUrl = "";
string source = "";
string desen = "Müsait";
void wClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
source = e.Result; // Başarıyla çekilen kaynak kodlarımız "source" değişkenine atanıyor.
bool varmi = Regex.IsMatch(source, desen); // "desen" içerisindeki ifademizi kontrol ettiriyoruz.
if (varmi) // True değeri döndüğünde lblSonuc kontrolüne "Daha önce alınmamış" uyarısı atanıyor. Eğer "false" ise "Daha önce alınmış".
lblSonuc.Text = "Daha önce alınmamış.";
else
lblSonuc.Text = "Daha önce alınmış.";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); // Eğer bir hata verirse yazdırıyoruz.
}
}
private void Button1_Click(object sender, EventArgs e)
{
try
{
sourceUrl = "https://domainadresi.com/" + txtDomain.Text;
wClient.DownloadStringAsync(new Uri(sourceUrl));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); // Eğer bir hata verirse yazdırıyoruz.
}
}Merhabalar r10 üyeleri. Bir siteden webclient yardımıyla veri çekip müsait yazısını gördüğünde label içerisine "Daha önce alınmamış" yazısını bastırmak istiyorum ancak sürekli alınmış yazısı çıkıyor. Nerede hata yapmaktayım?
[C#] Nerede Hata Yapıyorum?
8
●196
- 05-02-2020, 20:12:51Üyeliği durduruldu
- 05-02-2020, 20:25:17Üyeliği durdurulduSource ve desen adlı stringlerin atamasını yaptım. "desen" içerisindeki ifadeyi kontrol ettirip webclient içinde geçiyorsa true değerine döndürmeyi amaçladım.Eagless adlı üyeden alıntı: mesajı görüntüle
- 05-02-2020, 20:26:09Siteden müsait şeklinde tamamı küçük harf olarak dönüyorsa, yazdığınız desenle eşleşmez. Aşağıdaki gibi options ekleyerek büyük, küçük harf duyarlılığını kapatabilirsiniz.Dovahkiin adlı üyeden alıntı: mesajı görüntüle
bool varmi = Regex.IsMatch(source, desen, RegexOptions.IgnoreCase);
Yada source.Contains("aranan") ile regex kullanmadan texti içerip içermediğini kontrol edebilirsiniz. - 05-02-2020, 20:35:39Üyeliği durdurulduİki yöntemi de denedim ancak yine aynı problemle karşılaştım.pr1d3 adlı üyeden alıntı: mesajı görüntüle
- 05-02-2020, 20:56:26Veri çektiğiniz sitenin kaynak kodunda desen değişkenine atadığınız değerin olup olmadığını kontrol edin.
Kodda sorun yok, gelen verinin incelenmesi gerekiyor.
Domain'in daha önce alınıp alınmadığını mı sorguluyorsunuz? Amacınızı ya da veri çektiğiniz siteyi bilirsek daha detaylı inceleyebiliriz. - 05-02-2020, 21:02:55Üyeliği durduruldu@pr1d3; sayesinde çözdüm sorunu. Herkese teşekkür ederim. Domain sorgulama amacındaydım ve godaddyden veri çekiyordum ancak veriyi json olarak çekiyormuş.erkanakgun adlı üyeden alıntı: mesajı görüntüle
- 05-02-2020, 21:27:43
void wClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { string alindiMesaji = null; try { // olası hata kontrolleri if (e.Cancelled) throw new Exception("İndirme işlemi iptal edilmiş."); if (e.Error != null) throw new Exception($"İndirme işleminde hata oluştu : {e.Error.Message}"); string indirilen = e.Result; if (string.IsNullOrWhiteSpace(indirilen)) throw new Exception($"{nameof(e.Result)} içinde hiç veri yok!"); // genelde string indirmelerde sayfanın HTML çıktısı gelir. // kabaca sizin desen = Müsait değeriniz Html sayfasına eşit olamaz. zira Html sayfada bir sürü html tagları vardır. // bu yüden talep edilen saydaki çıktının UTF-8 olduğuna ve desen'deki gibi Müsait yazan bir Response verdiğinden emin olun. // aksi durumda hiç bir şekilde eşitlik olmaz. // bu yüzden indirilen değerin olduğu yere breakpoint atayıp bakın // veya // şu şekilde program çalışınca VisualStudio Output ekranına bakın. System.Diagnostics.Trace.WriteLine(indirilen); // şimdi kaynak hazır // response de sağda solda boşluk olabilir bu yüzden boşlukları Trim ile temizledik. this.source = indirilen.Trim(); // tam eşitlik sözkonusu ise // Regex alternatifi olarak Equals kullanabilirsiniz. Küçük karşılaştırmalarda daha iyi ve hızlıdır. Regex karmaşık desenler için idealdir. // StringComparison seçeneklerini değiştirebilirsiniz. if (this.source.Equals(this.desen, StringComparison.CurrentCultureIgnoreCase)) { alindiMesaji = "Tebrikler! Daha önce alınmamış :)"; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { lblSonuc.Text = alindiMesaji == null ? "Daha önce alınmış :(" : alindiMesaji; } } - 06-02-2020, 01:11:26Üyeliği durduruldu
private void Button1_Click(object sender, EventArgs e) { try { int satir_toplami = txtDomain.Lines.Count(); for (int i = 0; i <= satir_toplami - 1; i++) { sourceUrl = "https://www.godaddy.com/domainfind/v1/search/exact?q=" + txtDomain.Text; // "Ara" butonumuza bastığımızda, txtDomain kontrolümüzün içerisindeki değer parametre olarak hedef sitemize gönderiliyor. wClient.DownloadStringAsync(new Uri(sourceUrl)); // Ve asenkron olarak sonucumuz gelene kadar bekliyoruz. Bu sırada ajax gifleri koyabiliriz. Ben koymadım. Console.WriteLine(txtDomain.Lines[i]); } } catch (Exception ex) { MessageBox.Show(ex.Message); // Eğer bir hata verirse yazdırıyoruz. } } }Program kullanıcısı textboxun içerisine 10-20 tane domain yazacak. Butona bastığında her satır sırayla aynı döngüye girecek. Bu olayı nasıl yapabiliriz peki?