【发布时间】:2019-09-09 20:28:09
【问题描述】:
我正在浏览器中执行调用,然后检查内容。 Chrome 告诉我响应标头包含一个名为 Location 的标头。当我使用HttpClient 执行对同一URL 的调用时,我也得到了标题,但它是null。我没有信心判断是我遗漏了什么,还是HttpClient instance 的操作方式与浏览器的操作方式不同。
首先,我正在获取允许我在目标页面识别自己的 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;
我不确定下一步如何解决它。谷歌搜索确认这是一般情况下的正确方法。显然,与在浏览器中进行的操作相比,我正在做一些不同的事情,但我不能说如何推断出什么,更不用说如何解决它了。
【问题讨论】:
-
不应该在
response.Content.Headers吗? -
根据en.wikipedia.org/wiki/HTTP_location,当有重定向时发送位置。尝试 AllowAutoRedirect = true
标签: c# http-headers httpclient saml