Dlaczego serwisy nie lubią requestów z C# ?

0

Witam,

może ktoś mądrzejszy podpowie dlaczego tak się dzieje i jak z tym walczyć.. a chodzi o zapytania http do stron WWW.

Mam taki kod:

 namespace WebRequest_Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = @"http://www.ipqualityscore.com/api/ip_lookup.php?KEY=e16wr9b9530850n55methqm0htuhpe&IP=91.108.71.104&IM=1&STRICT=1";
            Uri httpSite = new Uri(url);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream resStream = response.GetResponseStream();

            string response_text = string.Empty;
            using (StreamReader reader = new StreamReader(resStream, Encoding.UTF8))
            {
                response_text = reader.ReadToEnd();
            }

            Console.WriteLine(response_text);
            Console.ReadKey();
        }
    }
}

I ten oto kod nic mi nie zwraca.. Wygląda na to, że serwis blokuje zapytania z C# tzn. tak mi się wydaje, bo miałem też problem ze stroną http://whatismyipaddress.com/ip/46.101.213.152, która przy wykonywaniu requestów z C# zwracała wynik: "Access Denied (AK1). Contact [email protected]". Pomogło dodanie UserAgenta, którym przedstawia się przeglądarka Chrome.

Nawiązując jeszcze do tematu wątku, czyli dlaczego serwisy nie lubią requestów z C#. Robiłem jeszcze próbę przy użyciu Pythona i biblioteki requests i tam bez problemów otrzymuję wyniki dla obu wspomnianych przeze mnie stron WWW.

Z tym można jeszcze pokombinować, aby móc wykonywać zapytania z C# ?

0

Ale przecież ten serwis zwraca 404.

0

@dam1an: który serwis zwraca Tobie 404 ? U mnie nie ma tego problemu.

0

Jak masz taki problem, że tworzysz jakiś soft do API i jeden ci działa, a drugi nie i nie wiesz dlaczego to warto zalogować ruch i zobaczyć czym różnią się zapytania (Fiddlerem lub bardziej niskopoziomowo Wireshrkiem).

0
agawa napisał(a):

przy wykonywaniu requestów z C# zwracała wynik: "Access Denied (AK1). Contact [email protected]". Pomogło dodanie UserAgenta, którym przedstawia się przeglądarka Chrome.

Odpowiedź masz w komunikacie: Contact [email protected]. Może nie chcą, by ktoś używał serwisu we własnej apce?
A może chcą za to $$$? ;-)

0

@Azarien: jak sam napisałeś, to tylko przypuszczenia ;> Natomiast drugi serwis po prostu nic nie zwraca..
@baroo - przyjrzę się sprawie, dzięki za wskazówkę.

0

Na początku nie zauważyłem, że jest tam zwracane 404, bo jestem prawie pewien, że wcześniej był tam zwracany inny błąd typu - brak odpowiedzi od serwera.
Ostatecznie teraz udało mi się zaczytać pożądaną wartość ;)

//mało sympatyczny kod, ale dla moich potrzeb wystarczający ;)
 catch (WebException ex)
  {
            HttpWebResponse respError = (HttpWebResponse)ex.Response;
            if (respError.StatusCode == HttpStatusCode.NotFound)
            {
                return ReadStreamFromResponse(respError);
            }
            else { return null; }
 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1