Thema: vb.net POST und GET
-
29. 01. 2008, 14:13 #1
vb.net POST und GET
Okay, also wenn man z.B. bei Pastebin einen text einträgt und dabei die Aktionen mitschneidet, erhält man folgendes:
Nun, eigentlich einleuchtend und nicht sehr schwer, in curl z.B. hab ich das schon ganz leicht nachgebaut, aber wie macht man das in .NET ?POST http://pastebin.com/pastebin.php parent_pid=&format=text&code2=%0D%0AThis+is+only+a+Test%2C+Test%21&poster=H ardcoreHoly&paste=Send&expiry=f&email=")
Meine Anlaufstelle:
Nun scheint es deshalb nicht zu gehen, da dass parent_pid=&format=text&code2=%0D%0AThis+is+only+a+Test%2C+Test%21&poster=H ardcoreHoly&paste=Send&expiry=f&email= ja als direkter POST-Parameter an http://pastebin.com/pastebin.php übergeben werden muss, denke ich ? Wie kann ich dass dann machen und könnt ihr mir dazu vllt. noch erklären, wie es anschleißend möglich ist, das Ergebnis (der Link zu dem eingetragenen text) zu finden und auszugeben ?Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://pastebin.com/pastebin.php parent_pid=&format=text&code2=%0D%0AThis+is+only+a+Test%2C+Test%21&poster=H ardcoreHoly&paste=Send&expiry=f&email=")
request.ContentLength
request.Method = "POST"
Dim answer As System.Net.HttpWebResponse = request.GetResponse
-
29. 01. 2008, 23:05 #2HelloWorldGast
Re: vb.net POST und GET
Die Antwort auf Deine Frage findet sich in der Klassendokumentation.
http://msdn2.microsoft.com/en-us/lib...st(VS.71).aspx
Mit der GetRequestStream-Methode solltest Du einen Stream bekommen, wo Du die POST-Daten reinschreiben kannst.
-
31. 01. 2008, 12:10 #3
Re: vb.net POST und GET
Danke erstmal, HelloWorld, habe mir den Artikel in der MSDN durchgelesen, allerdings hab ich irgendwie noch nicht so ganz den Durchblick....Ist wohl auch nicht so gut, ohne Vorwissen in dem Gebiet irgendetwas zu probieren, aber ich habe leider kein gutes Tutorial darüber gefunden......
Wie kann ich denn bei diesem Codebeispiel jetzt meine POST-Daten anhängen ?
Spoiler:
' Set the 'ContentType' property of the WebRequest.
myWebRequest.ContentType = "application/x-www-form-urlencoded"
' Set the 'ContentLength' property of the WebRequest.
myWebRequest.ContentLength = byteArray.Length
Dim newStream As Stream = myWebRequest.GetRequestStream()
newStream.Write(byteArray, 0, byteArray.Length)
' Close the Stream object.
newStream.Close()
' Assign the response object of 'WebRequest' to a 'WebResponse' variable.
Dim myWebResponse As WebResponse = myWebRequest.GetResponse()
P.S. Wenn wer vllt. noch ein gutes Einstiegsbuch/Tutorial in das Thema kennt, wäre ich ihm sehr verbunden, würde das Buch sogar kaufen, was hier auf dem G:B ja eine
Minderheit täte
-
31. 01. 2008, 14:29 #4
Re: vb.net POST und GET
das ist die eigenschaft, dass es ein post befehl ist.Code:request.method = "POST"
die postparameter schreibst du einfach in den requeststream
soße drübba, ferdischCode:dim writer as streamwriter = new streamwriter(request.getrequeststream) writer.write(postparameters) writer.close
-
31. 01. 2008, 22:35 #5HelloWorldGast
Re: vb.net POST und GET
Ich kann kaum Visual Basic, aber das hier:
ist doch ein Aufruf des Kopierkonstruktors. Wozu soll das gut sein? Also wieso nicht einfachCode:dim writer as streamwriter = new streamwriter(request.getrequeststream)
Code:dim writer as streamwriter = request.getrequeststream
-
01. 02. 2008, 12:46 #6
Re: vb.net POST und GET
So, vielen Dank erstmal für eure Antworten
. Ging auch relativ zügig.
Habe mich nun rangesetzt und was gebastelt, um das Empfangene nach dem "POST" auch lesbar machen zu können.Ich habe es hinbekommen, aber leider ist es etwas kompliziert und lang...könnte man das vllt. noch eindampfen?Ich will nur den POST-Befehl senden und den empfangenen Quellcode dann als text in einer Textbox ausgeben können.
Hier der Code:
Spoiler:
Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.testedich.de/search.php3")
request.Method = "POST"
Dim writer As IO.StreamWriter = New IO.StreamWriter(request.GetRequestStream)
writer.Write("search=tsten")
writer.close()
Dim myWebResponse As Net.HttpWebResponse = request.GetResponse()
Dim ReceiveStream As IO.Stream = myWebResponse.GetResponseStream()
Dim encode As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")
Dim readStream As New IO.StreamReader(ReceiveStream, encode)
Dim read(256) As [Char]
Dim count As Integer = readStream.Read(read, 0, 256)
While count > 0
' Dump the 256 characters on a string and display the string onto the console.
Dim str As New [String](read, 0, count)
TextBox1.Text &= str
count = readStream.Read(read, 0, 256)
End While
readStream.Close()
' Release the resources of response object.
myWebResponse.Close()
P.S. ich verstehe ehrlich gesagt die while-Schleife nicht ganz, diese hier:
Wieso geht die Schleife, während die Variable "count" größer als 0 ist ?.Und Wieso wird sie davor so definiert :Dim count As Integer = readStream.Read(read, 0, 256)
While count > 0
Dim str As New [String](read, 0, count)
Console.Write(str)
count = readStream.Read(read, 0, 256)
End While. Und dann wird ja in der Schleife count erneut genauso definiert, wie es oben schon passiert ist....readStream.Read(read, 0, 256)
Entschuldigung für die vielen Fragen, aber was bringt mir ein Code, den ich nicht verstehe ?!
-
01. 02. 2008, 13:48 #7
Re: vb.net POST und GET
so wich das sehe hast du da irgend ein code schnippsel aufgeschnappt für einen unnötig langen streamreader
hier mein vorschlag
Code:'request geschichte getan dim response as httpwebresponse = request.getresponse dim reader as streamreader = new streamreader(response.getresponsestream) textbox1.text = reader.readtoend reader.close reponse.close
-
01. 02. 2008, 20:09 #8HelloWorldGast
Re: vb.net POST und GET
Liest hier eigentlich irgendjemand noch die Postings? Wozu der Schwachsinn mit dem neuen Streamreader? Wieso nicht einfach den nehmen, der von GetRequestStream() geliefert wird?
-
05. 02. 2008, 10:46 #9
Re: vb.net POST und GET
Machs doch einfach mit nem Socket.....
pack die Daten in ein byte array
erstell nen Listening Thread...
sende die Daten über den Socket
warte auf antwort
fertig
ganz einfach und logisch...
Mfg Spiek
-
05. 02. 2008, 17:36 #10HelloWorldGast
Re: vb.net POST und GET
Es ist ja nicht schlimm, dass Du keine Ahnung hast. Aber musst Du das gleich so in die Welt hinaustragen?
Zitat von Spiek
-
05. 02. 2008, 21:17 #11
Re: vb.net POST und GET
@mo_scanner: Danke
, hab mir schon gedacht, dass da irgendetwas zu lang und umständlich war .......:
Also, Helloworld, ist die Methode von mo_scanner die praktikabelste oder was stört dich an Spiek´s Aussage.Entschuldigung, dass ich so dumm frage, hab noch nichts mit Sockets o.ä. gemacht und der Artikel bei Wikipedia enthüllt mir ehrlich gesagt auch nicht so viel (aber ich informiere mich grundsätzlich immer erst vorher über ein Thema, bevor ich mitrede!Das sollte eigentlich selbstverständlich sein....).
-
05. 02. 2008, 21:54 #12HelloWorldGast
Re: vb.net POST und GET
Das HTTP-Protokoll ist in einem RFC festgelegt, und wenn man mal schnell zwischendurch über Sockets etwas zusammenfrickelt, dann ist das mit ziemlicher Sicherheit _nicht_ konform zu diesem RFC. Deswegen liefert Microsoft ja auch eine Implementierung des Protokolls mit aus, und die sollte man nutzen. Die Wiederverwendung vorhandenen Codes ist wahrscheinlich eines der wichtigsten Prinzipien in der Programmierung überhaupt, und Spiek hat das ohne jeden guten Grund verletzt.
-
06. 02. 2008, 19:45 #13
Re: vb.net POST und GET
Ok, Danke für die Erläuterungen.
Wenn ich jetzt aber einen GET request statt dem POST-request verwende, kommt immer die Meldung "Inhaltsteil mit diesem Verbtyp kann nicht gesendet werden."
Also hab ich mir übrlegt, wie man den GET sonst verschicken könnte und da es am Streamwriter gelegen habe müsste, habe ich dann folgenden Code verwendet:
Spoiler:
Dim request2 As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://oxygen-warez.com/?q=testen")
request2.Method = "GET"
Dim response2 As Net.HttpWebResponse = request2.GetResponse
Dim reader2 As IO.StreamReader = New IO.StreamReader(response2.GetResponseStream)
TextBox1.Text = reader2.ReadToEnd
reader2.Close()
response2.Close()
Funktioniert tadellos, allerdings möchte ich eigentlich lieber wie bei dem POST Befehl meinen zusätzlichen Get-Befehl (oder wie nennt man das "/?q=testen", dass eigentlich zu dem Link "http://oxygen-warez.com" gesendet werden müsste?) direkt übergeben per Streamwriter o.ä. Ist das möglich und habe ich es nur falsch angegeben ?
-
07. 02. 2008, 11:50 #14
Re: vb.net POST und GET
ich bin mir grade nicht sicher, was dein problem ist, aber ich versuche mal ein bisschen zu erläutern.
post und get unterscheiden sich grundsätzlich in der art, wie informationen, sprich formulardaten übergeben werden. bei get ist es denkbar einfach: der name des formulars+wert werden an die url angehängt, beispielsweise ?p=news oder oder.
der unterschied bei post ist, dass die daten nicht an die url angehängt werden, sondern im request mitgesendet werden, für den ottonormalbrowserbenutzer nicht sichtbar, allerdings leicht mit sniffern o. ä. rauszufinden. diese informationen müssen im code in den requeststream geschrieben werden.
ich hoffe, das erklärt deine frage
-
09. 03. 2008, 11:18 #15
Re: vb.net POST und GET
Okay, danke, das hat einiges geklärt
Sorry, dass ich erst so verspätet darauf reagiere, muss mal meine Bookmarks hier ausmüllen.....
-
09. 03. 2008, 11:42 #16
Re: vb.net POST und GET
das Problem ist zwar gelöst aber ich poste mal meinen Request (mit dem hab ich alle Linkverschlüsselungsseiten DeCrypthet und seit neuen auch Rapidsafe :P)
ist halt alles in einemCode:Dim req As Net.HttpWebRequest Dim resp As Net.HttpWebResponse Dim str, str2 As IO.Stream Dim cookies As Net.CookieContainer Dim buffer As String Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(*postdata*) 'das sind die Post Informationen in Get werden sie über den URL mitgeliefert :T req = Net.WebRequest.Create(url) req.CookieContainer = cookies 'fürd cookies fallsch noch eine hast req.Method = "POST" req.Accept = "*/*" 'Das hier alles ist so gesehn unwichtig aber egal :) req.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "de") req.Headers.Add("UA-CPU", "x86") req.Headers.Add(Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate") 'Fürn Post Request den ContentType & Lenght + Data req.ContentType = "application/x-www-form-urlencoded" req.ContentLength = data.Length str2 = req.GetRequestStream() str2.Write(data, 0, data.Length) str2.Close() resp = req.GetResponse str = resp.GetResponseStream() If (resp.ContentEncoding.ToLower().Contains("gzip")) Then str = New IO.Compression.GZipStream(str, IO.Compression.CompressionMode.Decompress) ElseIf (resp.ContentEncoding.ToLower().Contains("deflate")) Then str = New IO.Compression.DeflateStream(str, IO.Compression.CompressionMode.Decompress) End If 'Fall der Server die Page in GZIP / Deflate zurück gibt dann habt hier einen Decoder buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd 'das ist die auslese sie ist (!) nicht geeignet wenn ihr einen Request an ein Bild/SWF ö.ä. macht da es durch das ASCII sonst zerstört wird
sonst aber kein unterschied
mfg
HyP3r
-
17. 04. 2011, 22:23 #17Mitglied
- Registriert seit
- Apr 2011
- Beiträge
- 1
Re: vb.net POST und GET
auch wenn des Thema schon ewig alt ist und gerade durch zufall draufgestoßen bin wollte ich einfach mal eine function von mir posten die daten an eine webseite posten kann und die antwort darauf zurückgibt...
Imports System.Net
Public Function httpDataPost(ByVal url As String, ByVal Poststring As String) As String
Dim byteArray As Byte() = System.Text.UTF8Encoding.UTF8.GetBytes(Poststring)
Dim myWebRequest As HttpWebRequest
myWebRequest = CType(HttpWebRequest.Create(url), HttpWebRequest)
myWebRequest.CookieContainer = proginfo.cookie
myWebRequest.Method = WebRequestMethods.Http.Post
' Set the 'ContentType' property of the WebRequest.
myWebRequest.ContentType = "application/x-www-form-urlencoded"
' Set the 'ContentLength' property of the WebRequest.
myWebRequest.ContentLength = byteArray.Length
Dim newStream As Stream = myWebRequest.GetRequestStream()
newStream.Write(byteArray, 0, byteArray.Length)
' Close the Stream object.
newStream.Close()
' Assign the response object of 'WebRequest' to a 'WebResponse' variable.
Dim myWebResponse As WebResponse = myWebRequest.GetResponse()
Dim stre As New StreamReader(myWebResponse.GetResponseStream())
Return stre.ReadToEnd()
End Function
-


Zitieren
mehr lesen...







Occupy Kiel: Massiver Sachschaden...
Heute, 20:15 in gulli:news