在 C# 中重用 HttpWebRequest 的连接

2023-12-09

我需要使用 .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 来保存会话 ID。

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

C# 通过 httpwebrequest 保留会话 ID

同一会话中的多个 WebRequest

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中重用 HttpWebRequest 的连接 的相关文章

随机推荐

  • 如何查找使用 TextChanged 添加的文本

    我希望在文本框中的文本和变量中的字符串之间进行同步 我找到了如何获取更改字符串的索引 在文本框中 添加的长度和删除的长度 但如何才能真正找到添加的字符串 到目前为止 我已经使用了 TextChangedEventArgs Changes 并
  • 在 WPF 中动态生成的 DataGrid.Columns 中显示图像

    我必须从查询中转换信息数据 并根据从底层数据库读取的值显示图像 假设我的查询中有这些数据 Identifiant ProcessId AlarmLevel BOUDA25 100 1 BOUDA25 110 1 BOUDA25 130 1
  • 如何在ng-repeat中动态更新ng-model?

    我在我的角度页面中面临动态 ng model 值的一些问题 这是我的示例 JSON mytabs name tab1 values value value1 value value2 value value3 value value4 na
  • 引起原因:使用 lombok 时 java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags

    我在 pom xml 中有以下依赖项
  • Excel VBA ADO SQL - From 子句中的语法错误

    VBA ADO 中的以下 SQL 给出 From 子句中的语法错误 错误 Sub RunSQL2 Dim cn As ADODB Connection Dim rs As ADODB Recordset Dim strFile As Str
  • 如何编辑一篇博客文章而不是其他博客文章的 CSS 以获得 5 星级评级系统?

    我最近创建了我自己的博客使用 Google 的 Blogger 当我读完一本特定的书时 我有一个本书的我读过的部分我想要一个静态的地方5星评级系统代替某种形式 也许与CSS 我可以定位每本书 这样我就能够显示1 至 5 星供访客查看 我不知
  • 将 std::mutex 用于由 boost::asio 管理的线程池

    不知何故的后续这个问题 我只是想知道是否可以使用std mutex在由 a 处理的函数中boost asio io service 使用股线是有点不切实际的 从我在升压参考我会说没关系 既然它指出 异步完成处理程序只会从当前正在调用 io
  • 下单后如何获取盈透证券(IBPY)的交易价格和佣金?

    http interactivebrokers github io tws api 也许是一个有用的链接 这张图片来自盈透证券的java API指南 我想要的数字是交易日志中的价格和佣金 from ib opt import Connect
  • Javascript 检测用户是否更改选项卡

    我正在编写一个用于在线测验的网页 我的基本要求是 如果用户更改选项卡或打开新闻窗口 即使没有最小化其浏览器 即如果该人试图从其他窗口 选项卡查看答案 它也必须触发一个事件 停止测验 我怎样才能做到这一点 Note 尽量避免在您的答案中包含前
  • 如何让 Google Cloud Functions 保持温暖?

    我知道这可能会错过使用 Cloud Functions 的初衷 但在我的具体情况下 我使用 Cloud Functions 是因为这是我将 Next js 与 Firebase Hosting 桥接的唯一方法 我不需要使其具有成本效益 等等
  • 放大和缩小按钮 - highcharts

    我在气泡图中有自定义缩放按钮 放大 缩小 当用户单击 放大 按钮时 应该在图表中从左到右进行缩放 类似地 缩小应该以这种方式发生 这与立即发生缩小的重置缩放功能相反 小提琴链接 https jsfiddle net abcdlearner
  • 将数据发布到 colorbox iframe?

    这是我正在使用的代码 从我见过的其他例子来看 这应该有效 但事实并非如此 并且已经确保我使用的是最新的彩盒 function updateFolderCate ID Type colorbox iframe true scrolling f
  • 如何使用 System.out.printf?

    我的老师希望我们在格式方法 在最底部 中显示我们的值 但问题是我们有一个子程序 她没有向我们展示如何使用它 而且我的老师也没有提供帮助 任何建议或帮助将不胜感激 public class SphereCalculations public
  • Android 增强现实应用程序从屏幕点转换列表位置

    我有问题 找不到解决方案 我制作了一个 Android 增强现实应用程序 在我的应用程序中 我有一个兴趣点列表 每个兴趣点都是一个位置 经度 纬度 海拔 我知道我的位置并且我有 相机的 方位角 现在我的问题是 如何在屏幕上绘制这些点 gps
  • pthread_create 并传递一个整数作为最后一个参数

    我有以下功能 void foo void i int a int i int main pthread t thread int i pthread create thread 0 foo void i 编译时 存在一些关于转换的错误 vo
  • 部署到 IIS 7 时诊断跟踪日志记录不起作用

    我正在将站点从 IIS 6 迁移到 IIS 7 但无法查看所有日志 我的system diagnostics配置如下
  • Java JTextPane + JScrollPane:取消/激活自动滚动

    我目前正在用 Java 编写一个简单的聊天 目前我陷入了这个问题 我希望我的输出 JTextPane 的行为就像您期望它从良好的聊天中获得的那样 即默认情况下 当新文本到达时文本会自动滚动 使用 outputfield setCaretPo
  • 如何在 Spark 中向分解结构添加列?

    假设我有以下数据 id 1 payload foo 1 lol 2 foo 2 lol 2 我想分解有效负载并向其中添加一列 如下所示 df df select id F explode payload alias data df df w
  • Codeigniter AOP [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要 Codeigniter PHP 框架的 AOP 范例的良好实现 你有什么建议我 面向方面的编程在 PHP 世界中还不是很普遍 我不确定 CI
  • 在 C# 中重用 HttpWebRequest 的连接

    我需要使用 Net 发出 POST 请求 我可以通过 GET 进行身份验证 因此我尝试在同一连接上发出 POST 请求以保持身份验证 问题是我收到 401 Not Authenticated 异常 这意味着连接尚未被重用 HttpWebRe