単純なテキストデータをマルチパート形式のCGIに送信しようとしています。HttpWebRequest multipartフォームデータ
問題は..私はフォームデータをどのようにフォーマットするのか分からない!要するに、私のシステムでは、ポストデータを含む文字列を準備し、request.GetRequestStream()を使用してストリームライターを作成し、そのストリームライターにポストストリングを直接書き込みます。その後、ストリームライターを閉じて要求を送信します。
私はそうと、文字列の書式を設定しようとしている:「Param1を= sometext & PARAM2 = sometext」が、私はエラーを返します:
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
は明らかに私が間違っている文字列の書式を設定していますが、私はのためにすることはできません私の人生はこれをどうやって正しく行うかを理解しています。
誰かが私を啓発できますか? :)
EDIT、私も変更しようとしましたrequest.ContentType = "application/x-www-form-urlencoded";
からrequest.ContentType = "multipart/form-data";
に変更しました。これは役に立たなかったが、私はそれをそのままにするつもりだ。
EDIT:フルコード:
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();
}
ポストデータを送信処理するコードの一部:
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();
私のためにフォーマットしてくれてありがとう、Codo:D忘れてしまった。助けてくれる –
あなたのコードを教えてもらえますか?あなたは "Expect"ヘッダーを設定しましたか? – Codo
確かに、私はそれを本当に素早く取ってもらいましょう......そして、私は "Expect"ヘッダーを設定しませんでした。おっと... –