HttpClient不会在响应中检索标头“ Location”(而浏览器请求会标出)

时间:2019-09-09 20:28:09

标签: c# http-headers httpclient saml

我正在浏览器中执行呼叫,然后检查内容。 Chrome告诉我,响应标头包含一个称为 Location 的标头。当我使用HttpClient执行对相同URL的调用时,我也获得了标头,但它是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;

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

1 个答案:

答案 0 :(得分:1)

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.

也-还有useful reading

相关问题