我已經寫了下面的代碼來構建一個POST,使用我在stackoverflow上找到的PostData類。在C#中構建一個POST#
PostData pd = new PostData();
pd.Params.Add(new PostDataParam("sessionId", "0", PostDataParamType.Field));
pd.Params.Add(new PostDataParam("guestId", "1", PostDataParamType.Field));
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(new Uri("http://oe1235/test/uploadTest.php").AbsoluteUri);
webrequest.ContentType = "multipart/form-data; boundary=" + pd.Boundary;
webrequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webrequest.Headers.Add("Accept-Language: en-gb,en;q=0.5");
webrequest.Headers.Add("Accept-Encoding: gzip,deflate");
webrequest.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
webrequest.Headers.Add("Keep-Alive: 115");
webrequest.Referer = "http://localhost/test/test.php";
webrequest.Headers.Add("Cache-Control: max-age=0");
webrequest.Method = "POST";
byte[] content = Encoding.ASCII.GetBytes(pd.GetPostData());
webrequest.ContentLength = content.Length;
Stream request = webrequest.GetRequestStream();
request.Write(content, 0, content.Length);
try {
Console.Write(webrequest.GetResponse());
} catch (Exception e) {
Console.Write("Error: " + e.ToString());
}
Console.ReadLine();
我監測與查爾斯的請求/響應,我也得到了以下內容:
POST /test/uploadTest.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----------8cd4899a18b409a
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Referer: http://localhost/test/test.php
Cache-Control: max-age=0
Host: oe1235
Content-Length: 275
Expect: 100-continue
----------8cd4899a18b409a
Content-Disposition: form-data; name="email"
MyEmail
----------8cd4899a18b409a
Content-Disposition: form-data; name="sessionId"
0
----------8cd4899a18b409a
Content-Disposition: form-data; name="guestId"
1
----------8cd4899a18b409a--
我用盡了一切我能想到的,但它仍然沒有出現被有效(我的POST接收器沒有響應,Charles報告「無法解碼多部分主體」,所以我做了錯誤的事情。我的邊界看起來沒問題,我在所有正確的位置都有換行符,我比較了它到Firefox構建的POST,並且它們看起來(幾乎 - 除了一個或兩個標題)相同。
是的 - 我沒有意識到兩個主要的破折號*不應該被包含在Content-Type頭部的邊界規範中。 – jaucourt 2010-11-02 19:05:00