[Version 4.1] HttpPostRequestLib

    • Release

    Es gibt 239 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

      Nunja ich habe es nicht mit solchen Hostenr getestet, dafür habe ich sie auch nicht geschrieben. Sondern für den ganz normalen Upload auf ein eigenen Server, denn damit funktioniert das. Für die Bildhoster müsste da sicher noch einiges angepasst werden, so wie die die Daten haben wollen, wenn sie es überhaupt übers Externe zulassen.

      Dodo schrieb:

      Nunja ich habe es nicht mit solchen Hostenr getestet, dafür habe ich sie auch nicht geschrieben. Sondern für den ganz normalen Upload auf ein eigenen Server, denn damit funktioniert das. Für die Bildhoster müsste da sicher noch einiges angepasst werden, so wie die die Daten haben wollen, wenn sie es überhaupt übers Externe zulassen.


      Naja wenn ich es über ein HTML Formular mache dann sieht das so aus:

      Quellcode

      1. <form enctype="multipart/form-data" method="POST" action="http://twitpic.com/api/upload">
      2. choose a picture: <input id="path" type="file" name="media"/> <br />
      3. twitter username: <input id="user" type="text" name="username" value=""/> <br />
      4. twitter password: <input id="pass" type="text" name="password" value=""/> <br />
      5. <input id="s" type="submit" value=" send pic to twitbin " form="submit"/>
      6. </form>

      So funktioniert es einbandfrei und ist auch nicht mehr als ein POST. Wundere mich deshalb wiso es mit der .dll nicht klappt?
      Weiß ja nicht auf was die Serverseitig überprüfen. Z.b. könnten sie den Referer nachsehen und wenn der nicht twitpic.com nicht zulassen. Oder sie checken den HTTP_USER_AGENT, ich habe in der Lib einen eigenen generiert, also nicht so "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.7) Gecko/20040803 Firefox/0.9.3".
      Ich vermute nicht das die Serverseitig viel überprüfen. Besonders nicht den User Agent da man ja die API auch aus Programmen nutzen können soll. Und wenn sie dies tun würden käme bestimmt als Antwort nicht "�" ;) . Ich denke eher mal das es ein Problem beim empfangen der Daten gibt die z.b. Twitpic zurück gibt. Es handelt sich hierbei um XML:

      XML-Quellcode

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <rsp stat="ok">
      3. <mediaid>abc123</mediaid>
      4. <mediaurl>http://twitpic.com/abc123</mediaurl>
      5. </rsp>

      Und da die dll auch bei anderen APIs von Webdiensten nicht funktioniert die ebenfalls nur XML als Antwort liefern vermute ich das es daran liegt.
      mfg
      hab mich gerade mal in mein Twitpic Account eingeloggt und bemerkt:
      Ja er lädt die Bilder hoch! 8o Angezeigt wird aber trotzdem nur "�". Mit dem Übertragen scheint allso alles zu funktionieren es muss dann wohl wirklich an der Antwort liegen die nicht richtig ankommt.

      Edit: hab das ganze mal mit tr.im (tr.im/website/api) probiert. Funktioniert! (Aber twitpic nicht :wacko: )
      Edit: yfrog geht ebenfalls!

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tobiasre“ ()

      Das ist wirklich merkwürdig, nunja ich habe es bei mir auch immer mit einem eigenen PHP Script versucht. Vielleicht benutzte ich die Lib mal um ein Multi ImageHost DLL raus zu machen, aber da ich momentan einfach nur das simple Uploaden mit Post Parametern brauchte habe ich nur die DLL gemacht.
      Ich hab da noch eine Frage zur Weiterverarbeitung von Resultaten. Wie stellt ihr das an? Habe mal angefangen die Resultate im Script mit <pre> und print_r auszugeben und in Vb weiter zu behandeln, allerdings ist das irgendwie nicht wirklich praktisch. Daher wollte ich mal Fragen wie ihr es so macht wenn ihr wie bei mir das php Array in vb verwenden wollt.
      Also ich parse Arrays vorher, übertragen wirds dann im CVS Format. Wenn ich z.B. viele Werte aus einer DB einlese

      Quellcode

      1. Dodo,Berlin,24
      2. Hans,Bremen,32
      3. Lisa,Hamburg,18


      In vb dann erstmal die Zeilen bekommen, mit Split(vbCr) in einer Schleife dann durchlaufen und nochmal Split(",") um an die einzelnen Spalten zu kommen. Mit print_r() würde ich es nicht machen, weil da hast du dann noch alles mögliche andere dabei Array { bla bla } und so weiter, das wird wohl schwierig die echten Daten zu ermitteln.
      Wollte grade was versuchen aber bekomme nur einen fehler
      Der Remoteserver hat einen Fehler zurückgegeben: (422).

      Code

      VB.NET-Quellcode

      1. Dim HTTPPostRequest As Net.HTTPPostRequest = New Net.HTTPPostRequest
      2. Dim PostCollection As Net.PostCollection = New Net.PostCollection
      3. PostCollection.Add("authenticity_token=", AuthToken)
      4. PostCollection.Add("&id=", "1419708")
      5. PostCollection.Add("&link=", "Download")
      6. TextBox1.Text = HTTPPostRequest.Create("http://stealth.to/folder/XXX/web", PostCollection)


      Die Daten die ich senden will sehen also so aus
      authenticity_token=Der AuthToken=&id=1419708&link=Download
      AuthToken hole ich vorher via WebRequest und RegEx aus dem Quelltext, der stimmt auch.

      Wo liegt der fehler und wie hole ich eigentlich ne antwort ?

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Enten Mann“ ()

      Ich erhalte manchmal - nicht immer - so etwas "□□□ " als Antwort statt der eigentlichen Website. Nun ist die Frage, ob möglicherweise der Server nicht gleich antwortet und daher etwas falschen zurückgeliefert wird, oder ob der Server - da es viele Anfragen sind - blockt.

      Eine HTTP-Abfrage klappt immer, die Anschließende POST-Abfrage klappt in der Regel durchgängig oder geht immer schief.

      Wurde schon mal diese "□□□ " Zeichenkette beobachtet oder irgendwas anderes statt der erwarteten Website.


      Eine andere Sache: wie ist das eigentlich mit den User-Agent-Abgaben (Referrer)?



      mariane
      Ich bin jetzt auf folgenden Code umgestiegen und dieser funktioniert deutlich besser.

      Methode POST

      VB.NET-Quellcode

      1. Dim client As New Net.WebClient
      2. Dim values As New System.Collections.Specialized.NameValueCollection
      3. client.Headers.Add("user-agent", "Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)")
      4. values.Add("arg1", "value1")
      5. values.Add("arg2", "value2")
      6. Dim dataBuffer As Byte() = client.UploadValues("http://www.seite.de/abfrage.aspx", "POST", values)
      7. Dim htmlSource As String = System.Text.Encoding.Default.GetString(dataBuffer)


      normales HTTP_Request

      VB.NET-Quellcode

      1. Dim client As New Net.WebClient
      2. client.Headers.Add("user-agent", "Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)")
      3. Dim dataBuffer As Byte() = client.DownloadData("http://www.seite.de/abfrage.aspx" & "?arg1=value1&arg2=value2")
      4. Dim htmlSource As String = System.Text.Encoding.Default.GetString(dataBuffer)


      "user-agent" bzw. der Header ist optional

      Dateien hoch und runter laden geht ebenfalls, man muß dann halt entsprechend per client.DownloadFile bzw. client.UploadFile arbeiten, dazu habe ich jedoch keinen Code getestet, man findet aber im Netz schnell Beispiele.

      mariane
      Danke mariane für den Code. Mich würde allerdings interessieren wie ich dazu eine Datei hochlade. Habe leider nichts gutes gefunden bzw. nur "WebClient.uploadfile" und nicht in der verbindung mit "UploadValues". Vielleicht kann hier jemand helfen? Danke.