Skip to main content
 首页 » 编程设计

C# HttpClient Cookie 和 session ID 问题

2025年12月25日42insus

浏览了一些阅读 Material ,发现只需要输入简单表单而不是浏览器自动化的流程,我听说可以通过 HTTP 请求向服务器发出请求并发布其期望的信息。我想我应该尝试一下!

我会尽量开门见山:

class Program 
 {      
   private static System.Net.CookieContainer cookieContainer = new CookieContainer(); 
    private static HttpClientHandler clientHandler = new HttpClientHandler 
    { 
        AllowAutoRedirect = true, 
        UseCookies = true, 
        CookieContainer = cookieContainer 
    }; 

这就是我试图让 Http 客户端在整个程序中使用的情况。当我进入第一个登录屏幕时(我使用 fiddler 查看需要发布的表单内容),我成功登录了该帖子。

我将向您展示发布方法:

         async static void PostRequest(string strUrl,  
          IEnumerable<KeyValuePair<string, string>> queries) 
    { 
        HttpContent q = new FormUrlEncodedContent(queries); 
        HttpResponseMessage response = await client.PostAsync(strUrl, q); 
 
        HttpContent content = response.Content; 
        string myContent = await content.ReadAsStringAsync(); 
 
        // Console.WriteLine(myContent); 
        Console.WriteLine(response); 
        Console.WriteLine(myContent); 
        response.Dispose(); 
 
    } 

我的问题在这里,我尝试做的下一篇文章是您登录后的另一种形式。我再次使用 Fiddler 找出服务器的预期内容,并将其发布到适当的 URL,但是当我打印每个该过程的步骤,它几乎就像它不知道 session 或其他什么。 Fiddler 向我展示了 cookie 和 session ,我认为它是用容器捕获的,然后当我请求/发布到服务器上的页面时,它可以在程序的其余部分中使用。

我错过了什么吗?你们都无法访问实际的网页,但我可以解释一下 fiddler 在 cookie 选项卡下显示的内容:表示请求发送了 2685 字节的 cookie 数据,然后是一组巨大的随机字母和数字以及一些值查看特定于我的登录信息,然后我还看到另一组随机数字和字母,称为 session ID。

总结一下我的问题是,我是否误解了 CookieContainer 的作用?我的假设是,在我使用此 HttpClient 发出的所有请求或帖子中,它都会知道这是我初次登录时的 session 。

我可能还没有发现的想法、想法、链接,都值得赞赏:)。

谢谢大家!

请您参考如下方法:

您面临的问题是,从浏览器的角度来看,cookie 是自动的,但它们绑定(bind)到服务器的往返。

因此,当您在浏览器外部时(从 .NET 角度来看),CookieContainer 将与请求(及其响应)绑定(bind),仅此而已。

要实现您想要的效果,您需要从响应中检索 cookie 值,将它们存储在其他位置,然后在下一个请求中重新插入它们。

您会发现创建某种客户端来封装它并自动将上一个响应中的 cookie 附加到下一个请求非常有用,这样您就不必每次都手动执行此操作。