HttpWebRequest 2 pytania

0

Siemka,

Potrzebuję zrobić 2 rzeczy: logowanie i wysyłanie. (chciałem zrobić za pomocą webbrowsera, ale strona go nie obsługuje nawet z useragentem, a przeglądając to forum wpadłem właśnie na tema dotyczący httpwebrequest więc pomyślałem że właśnie za pomocą jego mogę spróbować)

A więc do rzeczy:

Logowanie:

Tutaj chyba dobrze robię bo:

 ASCIIEncoding encoding = new ASCIIEncoding();
                 string postData = "Username=testKonto&Password=test1;
                byte[] data = encoding.GetBytes(postData);

                WebRequest request = WebRequest.Create("URL");
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length; 

Ewentualnie:

string URI = "URL";
                string myParameters = "Username=testKonto&Password=test1";

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

I nie zwraca błędu

tutaj wynik z http headers:

POST /page/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

Username=testKonto&Password=test1

Ale jak sprawdzić czy się na 100% zalogował?

  1. Wysyłanie
POST /conversation/message HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8


conversationId=&userId=437737&message=Test&accessToken=&username=FakeKon&ajax=True 

Tutaj już kompletnie nie wiem jak wysłać. Same błędy.
czyli:
a. Nie loguje się prawidłowo i nie ma nawet możliwości spróbować wysłać
b. Coś źle wysyłam

Pomożecie? I sorry jak coś źle robię, ale nigdy mi to nie było potrzebne bo nie działałem na web'ach

ref

0

Użyj Fiddlera i dokładnie prześledź, czy wysyłasz identycznie to samo, co przeglądarka. I sprawdź, co odbierasz - nie zwraca błędu, a co zwraca? A może ustawia ciasteczko, aby zidentyfikować użytkownika za drugim żądaniem?

Na oko nie widzę błędu.

0

Na pewno są ustawiane ciacha więc spróbuj utworzyć CookieContainer i przypisz go do HttpWebRequest ale jeszcze przed wysłaniem POST danych logowania pobierz normalnie GET stronę logowania (bo też może coś ustawiać jeszcze przed logowaniem) i zawsze pamiętaj o odpowiednim ustawieniu nagłówka Referer bo niektóre strony są czułe na to.

EDIT: A tak w ogóle to HttpWebRequest nie obsługuje JS a być może właśnie skrypt ustawia jakieś potrzebne ciacha ale sprawdź to co napisałem wyżej.

0

Dzięki chłopaki! Udało mi się!

Dodałem Referer i ciasteczka i działa. Chciałem się tylko jeszcze zapytać jak to jest z tymi ciasteczkami + parametry

A więc: takie coś jest w ciasteczku: ASP.NET_SessionId=qn3jxfeluic4brjn15dhwq1d sessionId zapewne za każdym razem będzie się zmieniać. Co w tej sytuacji robić? Po prostu nie dodawać tego ciasteczka? Czy trzeba dodawać wszystkie?

I parametry: userId=437737 To też pewnie będzie się zmieniać za każdym razem. Mogę tego nie dodawać?
(całe: conversationId=&userId=437737&message=TEST&accessToken=&username=Fake&ajax=True)

Sorry jak głupie pytania, ale to serio jest mój "pierwszy raz" z requestami :)

0

Od czegoś to sessionID w tym ciasteczku jest, więc jak nie dodasz to prawdopodobnie nie zadziała.

0

Dobra z ciasteczkami nie ma problemu, ale niestety userid- cały czas się zmienia, a bez tego się wywala. Co w tej sytuacji robić? Dodam że z strony nie ma skąd go pobrać.

1

Powinno gdzieś być chyba że właśnie JS odpowiada za wpisanie tego parametru a wtedy chyba nic nie zrobisz bez kombinowania z WebBrowser. Sprawdź jakie nagłówki są zwracane może gdzieś w nagłówkach to jest (np. jest jakieś ciacho z tym ID).
Sprawdź też czy strona w przeglądarce działa przy wyłączonym JS (być może działa bo widzę parametr zapytania ajax=True) jeżeli tak to lepiej by było obsługiwać taką wersję.

0

Przeanalizowałem kod strony i UserID jest zwracany dopiero po wysłaniu wiadomości.

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