c# - 在 C# 中重用与 HttpWebRequest 的连接

标签 c# http httpwebrequest httprequest

我需要使用 .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&param2=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&param2=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.
}

最佳答案

你没有保持登录状态的原因是你没有给 HttpWebRequest 一个 CookieContainer 来保持 session ID。

请参阅以下 StackOverflow 问答,了解您可能的解决方案:

C# keep session id over httpwebrequest

Multiple WebRequest in same session

希望对您有所帮助。

关于c# - 在 C# 中重用与 HttpWebRequest 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025075/

相关文章:

c# - 如何制作限时网页?

python - 'application/x-www-form-urlencoded' 和空值的标准是什么?

java - 在 Java 中通过 HTTP 下载目录

windows - TLS1.2 Powershell HttpWebClient 支持

.net - 如何停止 .Net HttpWebRequest.GetResponse() 引发异常

http - 为什么我在使用 HttpWebRequest 时在某些链接上收到 "(304) Not Modified"错误?

c# - SortedDictionary 参数异常 : "Æ" and "AE" considered the same keys

c# - 如何正确打开文件进行删除?

Java URLDecoder,在 Linux 服务器 A 上出现异常,在 Linux 服务器 B 上运行良好

c# - 如何在 C# 中交换数组的两个值?