HttpWebRequest Jakiś poradnik.

0

Hej.

Możecie polecić jakiś dobry poradnik, najlepiej, po Polsku do HttpWebRequest?
Nie do końca mogę go zrozumieć. Zawsze goście w poradnikach, coś jest zmienione itd. Najlepiej jak by był wszystko od początku tłumaczone i w miarę aktualne. Po angielsku też w sumie może być, ale to najlepiej żeby był filmik, bo nie zawsze wszystko rozumiem. Może być nawet książka, ale to już musi być po Polsku. Aha, i proszę nie podawać msdn.

0

Ostatnie zdanie..

A tak wgl to czemu na mds pisze "Nieaktualne. Inicjuje nowe wystąpienie klasy HttpWebRequest" Czemu jest nieaktualne?

0

Od podajże .NET 4 zaleca się używanie HttpClient zamiast HttpWebRequest. To powiedzmy to taka "nowsza wersja".
Co do Nieaktualne. Inicjuje nowe wystąpienie klasy HttpWebRequest to nie powinno się używać konstruktorów z klasy HttpWebRequest tylko zamiast tego WebRequest.Create.

0

ah ok. Tylko że do tego to już wgl nie ma poradników. Eh. Nawet msdn nie jest po Polsku. Ale dzięki.

0

No, WebClient wydaje mi się trochę łatwiejszy niż HttpWebRequest, ale mam kilka pytań:

  1. Wysyłanie danych
    Znalazłem takie coś:
string URI = "URL";
            string myParameters = "param1=value1&param2=value2&param3=value3";

            using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                string HtmlResult = wc.UploadString(URI, myParameters);
            } 

Z tym że wywala się na

string HtmlResult = wc.UploadString(URI, myParameters); 

"Serwer zdalny zwrócił błąd: (500) Wewnętrzny błąd serwera."

  1. Jak zrobić klikanie w przycisk kiedy metoda to get?

I znam angielski (przynajmniej większość rozumiem. A jak nie to wrzucam do google translator :) ). Po prostu łatwiej się uczyć czegoś nowego z filmiku czy w języku Polskim :)

0

Specjalnie nie podałeś adresu strony?

string URI = "URL";
0

To nie będzie działało na każdą stronę? Mogę jakąś przykładową znaleźć

0

A czekaj. Teraz zauważyłem że używam WebClient a ty mi poleciłeś HttpClient. Który jest lepszy? Lepiej używać WebClienta czy HttpClienta?

0

Zależy czy potrzebujesz takie rzeczy jak:

  1. Wsparcie FTP
  2. Informacje o postępie pobierania
  3. Nie interesuje cię asynchroniczność
  4. .NET poniżej 4.5
    to wybrał bym WebClient.
    W innym przypadku używał bym HttpClient.

To może małe przykłady użycia GET ze strony NBP.

         using (WebClient webClient = new WebClient())
         {
            var content = webClient.DownloadString("http://www.nbp.pl/kursy/xml/LastA.xml");
            Console.WriteLine(content);
         }
         using (var client = new HttpClient())
         using (var response = await client.GetAsync("http://www.nbp.pl/kursy/xml/LastA.xml"))
         using (var content = response.Content)
         {
            string result = await content.ReadAsStringAsync();
            Console.WriteLine(result);
         }
0

Hm, no nie wiem. Chyba zdecyduje się na tego WebClienta bo wydaje się łatwiejszy. Ftp mnie nie interesuje, ale np. 2 może się przydać. Asynchroniczność też mnie zbyt (przynajmniej narazi) nie obchodzi.

A co do moich pytań:

  1. Np.
    Takie coś: http://poczatuj.pl/inc/sendMsg.php?userId=11413766&strangerId=11413765&msg=test
    Jest to metoda POST
    Domyślam się że żeby wysłać trzeba zrobić miej więcej coś takiego:
string URI = "http://poczatuj.pl/inc/sendMsg.php?";
            string myParameters = "msg=test";
 
            using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                string HtmlResult = wc.UploadString(URI, myParameters);
            }  

Ale skąd będę wiedział czy wiadomość wysłałem czy nie?

I kliknięcie w przycisk: http://poczatuj.pl/inc/leaveChat.php?userId=11413743
Jak? Przecież nie będę wysyłał żadnych parametrów.

  1. Jak kliknąć np. w: GET http://www.wykop.pl/hity/

Są to tylko przykłady, ale wydaje mi się będą dobre na początek.

I dzięki za pomoc :)

0
  1. Przykładowy POST:
using (WebClient webClient = new WebClient())
         {
            var content = webClient.UploadString("http://httpbin.org/post", "Raz Dwa Trzy");
            Console.WriteLine(content);
         }

Dostajesz w odpowiedzi to co przesłałeś:
''{
"args": {},
"data": "Raz Dwa Trzy",
"files": {},
"form": {},
"headers": {
"Content-Length": "12",
"Host": "httpbin.org"
},
"json": null,
"origin": "31.174.164.254",
"url": "http://httpbin.org/post"
}''

  1. Ale tak jak poprzednio z NBP:
         using (WebClient webClient = new WebClient())
         {
            var content = webClient.DownloadString("http://www.wykop.pl/hity/");
            Console.WriteLine(content);
         }

w odpowiedzi dostajesz zawartość strony w HTML.

Tylko co rozumiesz przez kliknąć? Nie rozumiem jaki jest cel tego wszystkiego jak byś opisał w paru słowach co ta aplikacja ma robić to może znalazło by się łatwiejsze rozwiązanie na przykład przy użyciu kontrolki WebBrowser.

0

No właśnie chciałem się z webbrowser'a na requesty wreszcie przesiąść :)

Przez kliknięcie chciałem po prostu kliknąć w przycisk. Dajmy na przykładzie tego czatuj (myślę że będzie on dobry do nauki):

Chciałbym wysłać wiadomość (byle jaką) i kliknąć button send. Tyle.
Jak to zrobić?

To jest wysyłanie: POST http://poczatuj.pl/inc/sendMsg.php?userId=11417000&strangerId=11417003&msg=TEST%C5%9Bc

Próbowałem to zrobić tak:

string URI = "http://poczatuj.pl/inc/sendMsg.php?";
            string myParameters = "msg=test";
 
            using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                string HtmlResult = wc.UploadString(URI, myParameters);
Console.WriteLine(HtmlResult);
            }   

Ale nic nie zwraca.

0

To będzie zwykły GET bo podajesz wiadomość w URL nie w ciele.
Poglądowy obrazek:
11inf03.gif

Więc:

         using (WebClient webClient = new WebClient())
         {
            webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            var content = webClient.DownloadString("http://poczatuj.pl/inc/sendMsg.php?userId=11417000&strangerId=11417003&msg=TEST%C5%9Bc");
            Console.WriteLine(content);
         }

Nie wiem do czego ta strona służy i czy nie ma tam jakiejś autoryzacji bo tak prosto to nie zadziała zapewne, ale to musisz popatrzyć jakiś porofailerem jak to wygląda na przykład w przeglądarce pod F12.

0

Niee.. to:

http://poczatuj.pl/inc/isTyping.php?strangerId=11418840

To jest wynik z Live HTTP Headers
poza tym UserId i strangerId za każdym razem się zmienia.

Jak by ci było łatwiej w HttpClient tłumaczyć to też możesz.

I dzięki za obrazek, pewnie mi się przyda :)

0

A co jeśli webclient zwraca: Serwer zdalny zwrócił błąd: (500) Wewnętrzny błąd serwera.

0

To znaczy, że najprawdopodobniej dostał złe dane i się wywalił.

0

Okej dzięki.

Ogólnie wczoraj trochę poczytałem i pobrałem taki program jak "charles".

Zwraca takie cuś

POST /conversation/send HTTP/1.1
Host: gochat.in
Content-Length: 127
Accept: */*
Origin: http://gochat.in
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://gochat.in/KilusXDD
Accept-Encoding: gzip, deflate, lzma
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: hasVisitedYoutubeModal=Yes; GochatRegisterCookie=False; adFirstVisitLog=adFirstVisitLogV=True; ASP.NET_SessionId=ach4w5i25hdugnzdwjqy4yze; 

conversationChannelId=presence-Ch7302b032-0a18-4695-849f-9c48feffae78&message=To+jest+test&isFromAnonymous=1&action=0&sockId=45496.5790850 

Jak widać wiadomość jest w conversationChannelId=presence-Ch7302b032-0a18-4695-849f-9c48feffae78&message=To+jest+test&isFromAnonymous=1&action=0&sockId=45496.5790850

Jak takie coś wysłać? Da radę za pomocą webclienta?

ref

Sorry że tak wcześnie ale to dla mnie ważne.

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