首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Httpclient问题

Httpclient问题
EN

Stack Overflow用户
提问于 2017-01-11 19:42:11
回答 2查看 1.9K关注 0票数 3

问题:我正在尝试使用httpclient从site.Now中获取数据,该站点要求您首先访问一个链接,然后只有您可以将数据发布到下一个链接。Link1是一个简单的get请求,Link2是一个post请求,现在我认为该站点首先从link1中存储一些cookie,然后才允许您将数据发布到link2,因为每当我试图以匿名的方式打开link2时,该站点就会显示错误消息“会话超时或达到最大连接限制。不能再继续了。请关闭并重新启动浏览器”,现在我已经尝试了:

代码语言:javascript
复制
 try
        {
            //Send the GET request
            httpResponse = await httpClient.GetAsync(new Uri(link1UriString));
            //Send the POSTrequest
             httpResponse = await httpClient.PostAsync(new Uri(link2uriString),postContent);                
            httpResponseBody = await httpResponse.Content.ReadAsStringAsync();

            }

但是我得到了会话超时错误消息。如何维护httpClient中持续从python中的web.Like接收到的会话的cookie

代码语言:javascript
复制
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
 urllib2.install_opener(opener)

Link1

Link2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 20:24:45

您可以使用CookieContainer为您处理cookies。

这样做,您就可以像这样创建HttpClient。

代码语言:javascript
复制
using System.Net;
using System.Net.Http;

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient httpClient = new HttpClient(handler);

httpResponse = await httpClient.GetAsync(new Uri(link1UriString));

(注意,它使用了HttpClient在System.Net.Http中的版本)

票数 3
EN

Stack Overflow用户

发布于 2017-01-11 20:25:07

因此,在第一个响应之后,就有了Set-Cookie头:

代码语言:javascript
复制
var responseMessage = await httpClient.GetAsync("http://115.248.50.60/registration/Main.jsp?wispId=1&nasId=00:15:17:c8:09:b1");
IEnumerable<string> values;
var coockieHeader = string.Empty;
if (responseMessage.Headers.TryGetValues("set-cookie", out values))
{
    coockieHeader = string.Join(string.Empty, values);
}

在此之后,只需将cookie设置为请求消息:

代码语言:javascript
复制
        var httpRequestMessage = new HttpRequestMessage
        {
            RequestUri = new Uri("http://115.248.50.60/registration/chooseAuth.do"),
            Content = postContent,
            Method = HttpMethod.Post
        };

        httpRequestMessage.Headers.Add("Cookie", values);
        var httpResponse = await httpClient.SendAsync(httpRequestMessage);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41599384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档