从 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,我不知道如何发送我的标头?的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTTPS 和 httpWebRequest

读取 HttpWebRequest 的 HTTP POST 请求

如何使用 httpwebrequest 将图像从网站拉到本地文件

底层连接 Closed on HttpWebRequest POST On production Server

使用 HttpClient 检查服务器证书

转asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端