C#HttpClient Cookie和会话ID问题

C#HttpClient Cookie和会话ID问题,c#,cookies,httpclient,C#,Cookies,Httpclient,浏览了一些阅读材料,发现对于只需要输入到简单表单中的流程,而不是浏览器自动化,我听说要向服务器发出请求并向服务器发送它希望通过HTTPrequests获得的信息。我想我会试一试的 我将在这里直截了当地说: class Program { private static System.Net.CookieContainer cookieContainer = new CookieContainer(); private static HttpClientHandler cl

浏览了一些阅读材料,发现对于只需要输入到简单表单中的流程,而不是浏览器自动化,我听说要向服务器发出请求并向服务器发送它希望通过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();

    }
异步静态void PostRequest(字符串strUrl,
IEnumerable查询)
{
HttpContent q=新的FormUrlEncodedContent(查询);
HttpResponseMessage response=wait client.PostAsync(strUrl,q);
HttpContent=response.content;
字符串myContent=wait content.ReadAsStringAsync();
//控制台。写线(myContent);
控制台写入线(响应);
控制台。写线(myContent);
response.Dispose();
}
我的问题是,我尝试做的下一个帖子是你登录后的另一个表单。我再次使用Fiddler计算出服务器期望的内容,并将其发布到适当的URL,但当我打印流程的每个步骤时,它几乎不知道会话或其他内容。Fiddler向我展示了cookie和会话,我认为它是用容器捕获的,然后当我请求/发布到服务器上的页面时,它可以在程序的其余部分使用

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

总结一下我的问题,我是否误解了CookieContainer的工作?我的假设是,在我向这个HttpClient发出的所有请求或帖子中,它都会从我初次登录时就知道这是一个会话

我可能还没有发现的想法、想法和链接都很感激:)


谢谢大家

您面临的问题是,从浏览器的角度来看,cookie是自动的,但它们必须往返于服务器

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

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


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

CookieContainer与一个请求/响应绑定。您需要从登录响应中检索身份验证cookie,并将其重新添加到其他请求中。IMHO,这里最好的方法是创建一个
ServiceCliente
,跟踪并在每次请求时自动添加此cookie,而不是每次都手动添加。明白了,当你这么说的时候,你是指我能够打印到控制台中的值,它以“set cookie”开头,所以后面的值(长字符串)是我想要的?Anderson,你应该回答这个问题,这样我就可以选择它。我能够按照你说的那样获取cookie和会话ID。Aswered,这样你就可以标记为已解决。然后我将删除此评论:)谢谢你!真的帮了我的忙!您能提供一些关于您描述的解决方案的参考吗?@Muflix可能会有所帮助。