Problem mit multipart webrequest

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von tolio.

    Problem mit multipart webrequest

    Also kurz und knapp, ich will nen bild hochladen, am bsp facebook jedoch will das nicht so wie ich es wills, hier mein code (weitere Details unten):

    Facebook meldet nur das der upload fehlgeschlagen ist, der request erzeugt also keine exception.

    Mein einziger Anhaltspunkt und Strohhalm an den ich mich noch klammere ist die content lenght denn da habe ich einen Unterschied festgestellt,
    da der post den ich selber sende nur eine länge von 34012 hat während der mitgeschnittene 45 byte länger ist(siehe screen). Aus diesem Grund habe ich schon mit den encodings rumgespielt jedoch scheint default die beste Möglichkeit zu sein.

    Also ich hoffe mal auf das große angesammelte Wissen in den Köpfen der Leser und danke schonmal im vorraus.

    MfG
    tolio

    ps: Ja mir ist Stringbuilder ein begriff aber ändert nichts am problem, leider ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tolio“ ()

    X( also nur weil ich wenig Posts habe bin ich ja nicht ganz doof :D

    Selbsterverständlich ist vorher der login und das funktioniert auch alles, ist nicht die erste Sache die ich da in fb mache.
    Sicherlich nehme ich auch den selben cookiecontainer.

    Mein ansatz ist ja das die conten length nicht identisch mit der mitgespeicherten ist, sie ist aber konstant.
    Mach mal bei deinem Request:

    VB.NET-Quellcode

    1. Req.AllowAutoRedirect = True


    Und anstatt die Bytes mit der Stream.Write Methode zu schreiben, mal einen StreamWriter und StreamReader nutzen.

    VB.NET-Quellcode

    1. Dim Sw As New StreamWriter(R.GetRequestStream() , System.Text.Encoding.Default)
    2. Sw.Write(DeinByteArray)
    3. Sw.Close()
    4. Dim Re As New StreamReader(R.GetResponse.GetResponsestream())
    5. Dim Resp As String = Re.ReadToEnd
    6. Re.Close()
    7. 'Hier gibst Du dann Resp aus



    Weiss nicht ob das falsch formatiert ist, aber bei deinem Useragent, ist das korrekt so? Hinten die beiden "
    Req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"""
    Vllt. mal so:

    VB.NET-Quellcode

    1. Req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"




    Hast Du mal mit

    VB.NET-Quellcode

    1. If String = String
    geprüft ob dein Post dem Post aus Livehttpheaders entspricht?

    Da müsste ja dann auch False rauskommen, wenn 45 Zeichen mehr sind.

    Evtl. würde ich schon auf einen Stringbuilder oder zumindest String.Concat zurückgreifen.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Kevin Hombre“ ()

    ich hab den string aus livehttpheaders ja nicht, die unterschiedliche länge bezieht sich auf die content length.

    So ich habs grad mal mit nem streamwriter probiert aber da laufe ich nur in exceptions rein und auch jedes bsp im inet nutzt nur stream,

    VB.NET-Quellcode

    1. Dim Postdata() As Byte = Encoding.Default.GetBytes(str)
    2. Req.ContentLength = Postdata.Length
    3. Dim Sw As StreamWriter = New StreamWriter(Req.GetRequestStream(), System.Text.Encoding.Default)
    4. Sw.Write(Postdata)
    5. Sw.Close() '<- fehlerzeile

    resultiert in:
    Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen..


    VB.NET-Quellcode

    1. Dim Postdata() As Byte = Encoding.Default.GetBytes(str)
    2. Req.ContentLength = Postdata.Length
    3. Dim Sw As StreamWriter = New StreamWriter(Req.GetRequestStream(), System.Text.Encoding.Default)
    4. Sw.Write(Postdata)
    5. Dim Re As New StreamReader(Req.GetResponse.GetResponseStream) '<- fehlerzeile
    6. Dim Resp As String = Re.ReadToEnd
    7. Re.Close()
    8. Sw.Close()


    wenn ich den streamwriter(sw) nicht schließe sondern mir den request abholen will kommt:
    Sie müssen ContentLength-Byte für den Anforderungsstream schreiben, bevor Sie [Begin]GetResponse aufrufen.

    Auch sw.flush schafft keine abhilfe.

    Danke für den hinweis mit dem useragent (never copy code :D ) aber ändert leider auch nichts dran.

    und zu guter letzt das mit dem string ist mir klar das das nicht die feine englische art ist aber ich hatte es schon mit nem stringbuilder aber hat keinen unterscheid gemacht, deswegen hab ich es so getestet und dann so gelassen
    Ich hatte vergessen zu schreiben, dass Du den String übergibst in StreamWriter.Write(


    Lass mal die Konvertierung in ein ByteArray sein.

    VB.NET-Quellcode

    1. Dim Post As String = "blabla"
    2. Sw.Write(Post)
    3. Sw.Close()


    Ich bin ja zur Zeit auch mit Facebook beschäftigt(pureCode), ich werde mir das mal anschauen.
    hm fail auf die idee hätte ich auch kommen können :D

    diesmal keine exception aber nach wie vor kein erfoglreicher upload;

    HTML-Quellcode

    1. <html>
    2. <body>
    3. <script>
    4. document.domain = "facebook.com";window.parent.profile_picture_upload_fail("Profilbild konnte nicht aktualisiert werden","Es gab einen Fehler bei der Aktualisierung deines Profilbildes. Bitte versuche es erneut.");</script>
    5. </body>
    6. </html>


    Also genau das selbe ergebniss wie mit meinem code