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();
Danke für die Formatierung für mich, Codo: D Ich konnte das vergessen. Hilft eine Tonne. –
Können Sie uns Ihren Code zeigen? Hast du den "Expect" -Header gesetzt? – Codo
Sicher, lass es mich wirklich schnell holen ...... Und nein, ich habe nicht den "Expect" -Header gesetzt. Whoops .. –