2010-12-31 11 views
1

Ich versuche, einfache Textdaten zu einem mehrteiligen CGI zu übermitteln.HttpWebRequest multipart Formular-Daten

Das Problem ist .. Ich weiß nicht, wie Sie die Formulardaten formatieren!

Kurz gesagt, bereitet mein System einen String vor, der die Post-Daten enthält, erstellt einen Streamwriter mit request.GetRequestStream() und schreibt den Post-String direkt in diesen Streamwriter. Dann schließt er den Streamwriter und sendet die Anfrage.

Ich habe versucht, wie so die Zeichenfolge Formatierung: „Param1 = sometext & param2 = sometext“, aber ich habe den Fehler zurückgegeben:

Unhandled Exception: System.Net.WebException: The remote server returned an error: (417) Expectation Failed. 
    at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x002d9] in /private/tmp/monobuild/build/BUILD/mono-2.8/mcs/class/System/System.Net/HttpWebRequest.cs:1425 
    at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00143] in /private/tmp/monobuild/build/BUILD/mono-2.8/mcs/class/System/System.Net/HttpWebRequest.cs:1250 

Klar ich die Zeichenfolge falsch bin Formatierung, aber ich kann nicht für die Leben von mir herausfinden, wie man das richtig macht.

Kann mich jemand aufklären? :)

EDIT, habe ich auch versucht, request.ContentType = "application/x-www-form-urlencoded"; zu request.ContentType = "multipart/form-data"; zu ändern. Das hat nichts genützt, aber ich werde es so lassen.

EDIT: Voll Code:

public static string sendReq (string url, string pdata)//Pdata is the string containing form data 
{ 
    StringBuilder sb = new StringBuilder(); 
    byte[] buf = new byte[8192]; 
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); 
    CookieCollection jar = new CookieCollection(); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    l("Loading cookie jar onto request"); 
    CookieContainer cont = new CookieContainer(); 
    cont.Add(jar); 
    request.CookieContainer = cont; 
    if (pdata != "") 
    { 
     request.Method = "POST"; 
     request.ContentType = "multipart/form-data;"; 
     request.ContentLength = pdata.Length; 
     StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(pdata); 
     stOut.Close(); 
    } 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
    Stream resStream = response.GetResponseStream(); 
    string tempString = null; 
    int count = 0; 
    do 
    { 
     count = resStream.Read(buf, 0, buf.Length); 
     if (count != 0) 
     { 
      l("Data was read. ["+count+" bytes]. Encoding to ASCII"); 
      tempString = Encoding.ASCII.GetString(buf, 0, count); 
      l("Appending to full string"); 
      sb.Append(tempString); 
     } 
    } 
    while (count > 0); 
    return sb.ToString(); 
} 

Der Teil des Codes, der die Post-Daten Griffe zu senden:

if (pdata != "") 
    { 
     request.Method = "POST"; 
     request.ContentType = "multipart/form-data;"; 
     request.ContentLength = pdata.Length; 
     StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(pdata); 
     stOut.Close(); 
    } 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
+0

Danke für die Formatierung für mich, Codo: D Ich konnte das vergessen. Hilft eine Tonne. –

+0

Können Sie uns Ihren Code zeigen? Hast du den "Expect" -Header gesetzt? – Codo

+0

Sicher, lass es mich wirklich schnell holen ...... Und nein, ich habe nicht den "Expect" -Header gesetzt. Whoops .. –

Antwort

2

Versuchen:

Offensichtlich ist die HttpWebRequest fügt an Erwarten Sie Header standardmäßig, was eine Menge von Servern verwirrt.

aktualisieren:

Ein zurück wechseln:

request.ContentType = "application/x-www-form-urlencoded"; 

, da die aktuelle Kombination aus dem Inhaltstyp und die Daten im Körper nicht übereinstimmen.

+0

Hey, danke für die Antwort. : D Das half mir, den Fehler loszuwerden, den ich bekam. Vielen Dank. :) –

Verwandte Themen