【发布时间】:2012-01-26 20:46:39
【问题描述】:
我需要使用 .Net 发出 POST 请求。
我可以通过 GET 进行身份验证,因此我尝试在同一连接上发出 POST 请求以保持我的身份验证。
问题是我得到一个 401 Not Authenticated 异常,这意味着连接没有被重用。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.GetResponse().Close(); // Works fine
// Now the request I want to make...
request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.Method = "post";
string postData = "param1=1¶m2=2";
byte[] data = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
stream.Close();
request.GetResponse().Close(); // This line gets a 401 Not Authorized error.
}
编辑:有一些建议我需要传输 cookie。以下也不起作用:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
var response = (HttpWebResponse)request.GetResponse();
var cookieContainer = new CookieContainer();
foreach (Cookie cookie in response.Cookies)
{
cookieContainer.Add(cookie);
}
response.Close();
// Now the request I want to make...
request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.CookieContainer = cookieContainer;
request.Method = "post";
string postData = "param1=1¶m2=2";
byte[] data = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
request.GetResponse().Close(); // This line gets a 401 Not Authorized error.
}
【问题讨论】:
-
那里的答案是关闭响应。我已经在第三行完成了。
-
“使用”会自动关闭流,所以可能会删除“stream.Close();”会有所帮助。
-
新建
WebRequest是不是同一个连接? -
@climbage 我无法在现有内容上设置内容。
标签: c# http httpwebrequest httprequest