首页 > 解决方案 > HttpClient 不会在响应中检索标头“Location”(而浏览器请求会)

问题描述

我正在浏览器中执行调用,然后检查内容。Chrome 告诉我响应标头包含一个名为Location的标头。当我使用 执行对同一 URL 的调用时HttpClient,我也得到了标头,但它是null. 我没有信心判断是我遗漏了什么,或者HttpClient实例的操作方式与浏览器的操作方式是否存在差异。

首先,我得到了允许我在目标页面识别自己的 cookie。

string url = "https://www.pensionsmyndigheten.se/service/login/login"
  + "?targetPage=https://www.pensionsmyndigheten.se/service/overview/"
  + "&failurePage=https://www.pensionsmyndigheten.se/service/login/error/login-failed"
  + "&cancelPage=https://www.pensionsmyndigheten.se/";
Uri uri = new Uri(url);
CookieContainer cookieJar = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler { CookieContainer = cookieJar };
HttpClient client = new HttpClient(handler);

HttpResponseMessage result = client.GetAsync(uri).Result;
Cookie cookie = cookieJar.GetCookies(uri).First(e => e.Name == "pm_retention_urls");

然后,使用此 cookie,我尝试获取允许我发送授权请求的 SAML 查询字符串。

string url = "https://www.pensionsmyndigheten.se/service/login/discoresponse"
  + "?spId=default"
  + "&entityID=https%3A%2F%2Feid.legitimeringstjanst.se%2Fmobilt-bankid%2F";
Uri uri = new Uri(url);
CookieContainer cookieJar = new CookieContainer();
cookieJar.Add(cookie);
HttpClientHandler handler = new HttpClientHandler { CookieContainer = cookieJar };
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Referrer = uri;

HttpResponseMessage response = client.GetAsync(uri).Result;
HttpResponseHeaders headers = response.Headers;

我不确定下一步如何解决它。谷歌搜索确认这是一般情况下的正确方法。显然,与在浏览器中做的事情相比,我做了一些不同的事情,但我不能说如何推断出什么,更不用说如何解决它了。

标签: c#http-headershttpclientsaml

解决方案


http 客户端使用的处理程序默认自动重定向,并从结果中删除重定向响应标头。或者您可以说它不会将标头转发到最终响应。如果禁用自动重定向,则可以读取响应中的位置标头。您应该注意自己调用重定向目标,直到获得实际结果。

var handler = new HttpClientHandler
{
    CookieContainer = cookieJar,
    AllowAutoRedirect = false
};
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Referrer = uri;
var response = client.GetAsync(uri).Result;
var location = response.Headers["Location"];
// Call the get operation on the location url to continue.

另外——一些更有用的读物​​。


推荐阅读