【问题标题】:C# HttpClient Cookie and Session ID questionC# HttpClient Cookie 和 Session ID 问题
【发布时间】:2018-10-05 16:11:26
【问题描述】:

浏览了一些阅读材料,发现只需要输入简单表单而不是浏览器自动化的流程,我听说使用 HTTPrequests 期望的信息向服务器发出请求和发布。我想我会试一试!

我会尝试直截了当:

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

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

我给你看post方法:

         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,但是当我打印每个过程的步骤,它几乎就像它不知道会话或其他东西。 Fiddler 向我展示了 cookie 和会话,我认为它是通过容器捕获的,然后当我请求/发布到服务器上的页面时,它可以在整个程序的其余部分中使用。

我错过了什么吗?你们都无法访问实际的网页,但我可以解释提琴手在 cookie 选项卡下显示的内容:说请求发送了 2685 字节的 cookie 数据,然后是大量随机字母和数字以及一些值看起来特定于我的登录,然后我还会看到另一组称为会话 id 的随机数字和字母。

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

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

谢谢大家!

【问题讨论】:

  • CookieContainer 绑定到一个请求/响应。您需要从登录响应中检索身份验证 cookie 并将它们重新添加到其他请求中。恕我直言,这里最好的方法是创建一个 ServiceCliente 来跟踪并在每次请求时自动添加此 cookie,而不是每次都手动执行此操作。
  • 明白了,当你这么说的时候,你的意思是我能够打印到控制台的值,以“set-cookie”开头,所以后面的值(长字符串) 是我想要的吗?
  • 安德森,你应该回答这个问题,这样我才能挑选它。正如你所说的那样,我能够以这种方式获取 cookie 和会话 ID。
  • 已回答,因此您可以标记为已解决。之后我将删除此评论:)
  • 谢谢你!真的帮了我大忙!

标签: c# cookies httpclient


【解决方案1】:

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

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

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

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

【讨论】:

  • 你能提供一些关于你描述的解决方案的参考吗?
  • @Muflix 也许this 可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2018-10-27
  • 2011-10-10
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多