从 httpwebrequest 切换到 httpclient,我不知道如何发送我的标头?
Posted
技术标签:
【中文标题】从 httpwebrequest 切换到 httpclient,我不知道如何发送我的标头?【英文标题】:Switching from httpwebrequest to httpclient and I can't figure out how to send my header? 【发布时间】:2012-12-09 05:18:19 【问题描述】:所以,这是我使用的代码
string URL = "http://www.test.com/posts/.json";
var getInfo = (HttpWebRequest)HttpWebRequest.Create(URL);
getInfo.Headers["Cookie"] = CookieHeader;
getInfo.ContentType = "application/x-www-form-urlencoded";
using (WebResponse postStream = await getInfo.GetResponseAsync())
StreamReader reader = new StreamReader(postStream.GetResponseStream());
string str = reader.ReadToEnd();
我想切换到 httpclient,我已经开始工作了,除了它不传递 Cookie 信息。我得到了信息,但只是匿名信息。不是我发送的用户信息。这是我目前拥有的。
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri("http://www.test.com/");
client.DefaultRequestHeaders.Add("Cookie", CookieHeader);
HttpResponseMessage response = await client.GetAsync("http://www.test.com" + URL);
string str;
str = await response.Content.ReadAsStringAsync();
【问题讨论】:
【参考方案1】:您需要使用 HttpClientHandler
,将您的 cookie 添加到其中,然后将其传递给 HttpClient
的构造函数。
一个例子:
Uri baseUri = new Uri("http://www.test.com/");
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.CookieContainer.Add(baseUri, new Cookie("name", "value"));
HttpClient client = new HttpClient(clientHandler);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = baseUri;
HttpResponseMessage response = await client.GetAsync("http://www.test.com" + URL);
string str2 = await response.Content.ReadAsStringAsync();
我发现了对 here 相同行为的引用,指出 DefaultRequestHeaders
中名为“Cookie”的标头被忽略且未发送,但似乎任何其他值都可以按预期工作。
【讨论】:
以上是关于从 httpwebrequest 切换到 httpclient,我不知道如何发送我的标头?的主要内容,如果未能解决你的问题,请参考以下文章
读取 HttpWebRequest 的 HTTP POST 请求
如何使用 httpwebrequest 将图像从网站拉到本地文件
底层连接 Closed on HttpWebRequest POST On production Server
转asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端