[VB.NET] HttpWebRequest - Tutorial

07/21/2013 16:53 Brendan Jordan#76
Quote:
Originally Posted by Kabal931 View Post
Gibt es so ein tut auch für c# ?
steht eigentlich alles in msdn
[Only registered and activated users can see links. Click Here To Register...]
07/21/2013 16:56 Kabal931#77
Quote:
Originally Posted by M3BF05B View Post
steht eigentlich alles in msdn
[Only registered and activated users can see links. Click Here To Register...]
Ich verstehe aber nicht wie ich da das pw eingeben soll
07/22/2013 13:35 Kraizy​#78
Quote:
Originally Posted by Kabal931 View Post
Gibt es so ein tut auch für c# ?
Von mir nicht. Kannst ja aber nen Online-Converter benutzen, wie zB diesen:
[Only registered and activated users can see links. Click Here To Register...]
08/23/2013 11:31 yasaya5000#79
Tolles Tutorial!
Ich habe mal ein anderes Problem. Wie ist es möglich festzustellen ob eine Anfrage von einem realen Browser (z.B. Firefox) kommt oder ob der Request von einem Programm stammt.
Ich habe da eine Webseite die mir ständig 404 meldet obwohl ich den UserAgent-Parameter exakt an die Version von Firefox angepasst habe.

Ziel meiner Anwendung ist es einen EAN-Code an die Seite zu übergeben und im Quell-Code eine Produktbeschreibung zurück zu bekommen.

Link: [Only registered and activated users can see links. Click Here To Register...]

Die Ziffer ist der übergebene EAN-Code.

Per Firefox kein Problem mit VB.NET ständig die 404 (Webseite nicht gefunden).
08/30/2013 12:07 кυяαмα#80
Quote:
Originally Posted by Sedrika View Post
Dann sendest du 2 Post messages.
Einmal mit dem Login und einmal das mit der Sicherheit. UNd wenn ein Captcha da ist, lies ihn in eine PictureBox ein und lass den User das manuell eingeben. Danach machst du normal weiter.
kannst du das mal bitte genauer erklären? wenn ich die loginseite lade alles auslese und dann ein request abschicke geht das nicht?

wie soll es dann mit 2 requests klappen?
08/30/2013 12:30 Kraizy​#81
Quote:
Originally Posted by кυяαмα View Post
kannst du das mal bitte genauer erklären? wenn ich die loginseite lade alles auslese und dann ein request abschicke geht das nicht?

wie soll es dann mit 2 requests klappen?

Bin grad am Handy, deswegen kann ich dir nur nen kleinen Beispiel-Code zeigen, wie es mit der Http-Klasse funktionieren würde:

PHP Code:
With New Http
     
//login url aufrufen
     
Dim html As String = .GetResponse("login-url")

     
//daten auslesen, die für den login nötig sind (ist nur ein Beispiel)
     
Dim token1 As String //entweder mit SubString/Split oder RegEx das Nötige aus der Variable "html" auslesen
     
Dim token2 As String //hier genau das gleiche

     //post request abschicken
     
Dim post As String "tkn1=" token1 "&tkn2=" token2
     html 
= .GetResponse("post login-url"post)

     
//prüfen ob login erfolgreich war, indem du prüfst, ob die Variable "html" irgendwas enthält, was drauf schließen lässt, dass man eingeloggt ist. Alternative (die bessere/sichere Methode) wäre eben die Cookies zu prüfen
End With 
08/30/2013 13:27 кυяαмα#82
Quote:
Originally Posted by Kraizy​ View Post
Bin grad am Handy, deswegen kann ich dir nur nen kleinen Beispiel-Code zeigen, wie es mit der Http-Klasse funktionieren würde:

PHP Code:
With New Http
     
//login url aufrufen
     
Dim html As String = .GetResponse("login-url")

     
//daten auslesen, die für den login nötig sind (ist nur ein Beispiel)
     
Dim token1 As String //entweder mit SubString/Split oder RegEx das Nötige aus der Variable "html" auslesen
     
Dim token2 As String //hier genau das gleiche

     //post request abschicken
     
Dim post As String "tkn1=" token1 "&tkn2=" token2
     html 
= .GetResponse("post login-url"post)

     
//prüfen ob login erfolgreich war, indem du prüfst, ob die Variable "html" irgendwas enthält, was drauf schließen lässt, dass man eingeloggt ist. Alternative (die bessere/sichere Methode) wäre eben die Cookies zu prüfen
End With 
jop und genauso hab ich es auch mal probiert, jedoch hat es nicht beim captcha geklappt, da er bei "html = .GetResponse("post login-url", post)"

die seite neu geladen hat und das captcha somit ungültig war, kann auch sein das ich da ein tippfehler hatte, jedoch hatte ich das 2 mal gecheckt

und über regex wurden die werte auch richtig ausgelesen...
08/30/2013 13:52 Kraizy​#83
Kannst du mal die Seite hier posten?
08/30/2013 14:00 кυяαмα#84
Quote:
Originally Posted by Kraizy​ View Post
Kannst du mal die Seite hier posten?
da kann man jede seite als vergleich nehmen die ein captcha hat. als beispiel nimm doch einfach die regipage von epvpers oder einach [Only registered and activated users can see links. Click Here To Register...]

baut alles auf selbe auf, wie schon gesagt wenn er bei mir das postrequest abschickt lädt er neu und ein captcha ist ungültig, so wie ich das mitbekomen habe
08/30/2013 14:57 Kraizy​#85
Naja eigentlich ist es ziemlich simpel.
  • GET-Request an [Only registered and activated users can see links. Click Here To Register...] schicken
  • Die Captcha URL (ändert sich natürlich immer) aus dem Quelltext auslesen (z.B. [Only registered and activated users can see links. Click Here To Register...])
  • GET-Request an diese URL senden
  • Aus dem Quelltext den "challenge" Wert nach dem Doppelpunkt auslesen (und die ' entfernen):
    PHP Code:
    challenge '03AHJ_VutqsCxrnfcBlXgHbA7oQcsvXdsFzB6oo9-R1KaQjv0A6IMwHqmmtrbBoujPCrXZQnNA84anKrWXXUDBQIEAp9fUwJQ7-1_78Mg0O2CfalUAv5dhUJDkleKm60cndJzQ2LfMSrQ7cTCw-8vwq1NhtyVEes53KBRYkMD2NUNrdRuk4lSJQtw' 
  • Diesen Wert beim POST-Request mitübergeben (siehst du ja in LiveHttpHeaders).
Um das Captcha z.B. in einer PictureBox anzuzeigen, liest du einfach den Response-Stream aus:
PHP Code:
//Funktion:
Public Function GetResponseStream(ByVal url As String) As Stream
   request 
CType(HttpWebRequest.Create(url), HttpWebRequest)
   
request.CookieContainer cookieCon
   response 
CType(request.GetResponse(), HttpWebResponse)

   Return 
response.GetResponseStream()
End Function

//Aufruf:
PictureBox.Image Image.FromStream(.GetResponseStream("https://www.google.com/recaptcha/api/image?c=" challengeToken))
//challengeToken ist der Wert nach dem Doppelpunkt weiter oben in diesem Beitrag 
Würde dann in etwa so aussehen (ist schnell und eher unschön gemacht, aber naja..)
PHP Code:
With New Http
   Dim html 
As String = .GetResponse("http://www.hidemyass.com/anonymous-email/")
   
Dim captchaURL As String html.Substring(html.IndexOf("https://www.google.com/recaptcha/api/challenge?k=")).Split(""""c)(0)

   
html = .GetResponse(captchaURL)

   
Dim captchaToken As String html.Substring(html.IndexOf("challenge")).Split("'"c)(1)
   
PictureBox.Image Image.FromStream(.GetResponseStream("https://www.google.com/recaptcha/api/image?c=" captchaToken))

   
//POST zusammensetzen und abschicken. Solltest du wohl selbst schaffen
End With 
Hast nun sogar C&P-Code bekommen, jedoch hoffe ich, dass du daraus auch lernst und nicht einfach nur stur kopierst und einfügst.
01/11/2014 00:30 Twist'#86
Super Tutorial ,danke :)
01/11/2014 05:11 Zero-_-Cool#87
Erst einmal: Super Tutorial. VIELEN DANK!

Ich erhalte nur leider (login anfrage an epvp) immer wieder die nachricht, dass ich nicht eingeloggt bin. Warum weiss ich leider nicht. Werde es mal bei einer anderen Seite versuchen.

Und eine Frage ist mir noch in den Sinn gekommen: Kann ich die "erhaltenen" Cookies jetzt eigentlich an den, bzw einen, normalen WebBrowser übergeben? Wenn ja, wie wäre dies möglich. (Das Steuerelement 'WebBrowser')


P.S.: Ja ich weiß, dieser Thread ist älter, doch ist er der einzige seiner Art und ich wollte keinen neuen eröffnen.
01/11/2014 10:53 Kraizy​#88
Quote:
Originally Posted by Zero-_-Cool View Post
Erst einmal: Super Tutorial. VIELEN DANK!

Ich erhalte nur leider (login anfrage an epvp) immer wieder die nachricht, dass ich nicht eingeloggt bin. Warum weiss ich leider nicht. Werde es mal bei einer anderen Seite versuchen.

Und eine Frage ist mir noch in den Sinn gekommen: Kann ich die "erhaltenen" Cookies jetzt eigentlich an den, bzw einen, normalen WebBrowser übergeben? Wenn ja, wie wäre dies möglich. (Das Steuerelement 'WebBrowser')


P.S.: Ja ich weiß, dieser Thread ist älter, doch ist er der einzige seiner Art und ich wollte keinen neuen eröffnen.
1. Versuchs mal mit

PHP Code:
Dim byteArr() As Byte Encoding.GetEncoding("iso-8859-1").GetBytes(post
2. Bin mir nicht sicher, da ich grad am Handy bin und es nicht testen kann, aber probier mal sowas in der Art

PHP Code:
WebBrowser.Document.Cookie request.CookieContainer.GetCookies(url
Ansonsten einfach mal googlen.

Edit: Oder schau dir mal Beitrag #4 an in folgendem Link: [Only registered and activated users can see links. Click Here To Register...]
01/11/2014 11:38 alpines#89
Um noch etwas kleines hinzuzufügen, Live HTTP Headers wird nicht gebraucht.
Man kann stattdessen auf die Network Tools von den Browsern zurückgreifen.
Chrome z.B. F12 un dann auf Network, der schneidet auch Pakete mit.
FF sowie IE bieten selbe Funktionen ohne Addon.
01/11/2014 11:49 Zero-_-Cool#90
RIEEESEN EDIT :

Ich habe es nun nach erneutem überprüfen des gesamten Codes endlich geschafft meinen unsäglichen Fehler zu finden. Die Lange und sehr lange (vllt war sie sogar länger), hat mich dazu verleitet, eine komplette Zeile des von dir genannten Posts#4:
Quote:
Edit: Oder schau dir mal Beitrag #4 an in folgendem Link: [Only registered and activated users can see links. Click Here To Register...]
zu überspringen, ja gar von dem Monitor verschwinden zu lassen.. Ich saß nämlich geschätzte 5 Minuten an diesen paar Zeilen, doch diese Zeile ist mir nicht eine Sekunde lang bewusst gewesen...Diese:
Quote:
webBrowser1.DocumentStream = response.GetResponseStream();
Richtig übersetzt xD:
Quote:
WebBrowser1.DocumentStream = response.GetResponseStream
Eingefügt und das Problem mit den Cookies war erledigt.
So nun habe ich es geschafft, den HTTPRequest durchzuführen und das ganze an den WebBrowser1 zu übergeben. Mitsamt Cookie(s). Als ich dies nun testete, kam auch schon die nächste überraschung: Die anmeldung klappte, auch wenn diese If-Schleife die ich verwendete (wie eig zu erwarten) richtig funktionierte, mir jedoch immer einzureden versuchte, das irgendetwas schief gelaufen sei... Weil "Abmelden" nun einmal nicht auf der "Danke fürs einloggen"-Seite steht -.- But :handsdown: I DID IT!
Quote:
If html.Contains("Abmelden") Then
MessageBox.Show("logged in")

Else
MessageBox.Show("something went wrong")
End If


So diese abgeändert und taddaaaa... man man man..

ENDLICH KLAPPT ALLES!!!
Danke nochmals für die Hilfe!!! Schlafen ist wichtiger als so mancher denkt..
Ich lass den 'alten' Teil meines Posts aber (vorerst) noch da, weil ich meine unfähigkeit witzig finde und dies gerne zur Schau stelle, wenn es doch schon einmal da ist. (Falls nicht erwünscht bitte wegmachen/Ich mache dies sonst nach Aufforderung (gern). Danke fürs Lesen!



Sozusagen 'alter' Post:



Soo, neues Problem, neuer Post..
Wie gesagt kann ich mich erfolgreich einloggen und dies zuerst an den WebBrowser übergeben. Allerdings nur bis zur ersten "Thank you[...]" Seite, von welcher man dann weitergeleitet wird. Der WebBrowser verliert dann aber anscheinend die Cookies(oder ists nur eines(einer?)?) und mir wird ganz normal die "standart" epvpers Seite angezeigt.. Fragen über fragen.
Bitte helft mir ein wenig.