C#HttpClient未显示所有cookie
编辑:我为我的困惑道歉:我正在试图刮一个我没有写的网站;我不是在写ASP应用程序。我只想刮一个 在向登录页面发出post请求后,我尝试从另一个页面读取cookies。然而,我并没有看到我期望的所有饼干。我的代码如下:C#HttpClient未显示所有cookie,c#,.net,cookies,session-cookies,.net-core,C#,.net,Cookies,Session Cookies,.net Core,编辑:我为我的困惑道歉:我正在试图刮一个我没有写的网站;我不是在写ASP应用程序。我只想刮一个 在向登录页面发出post请求后,我尝试从另一个页面读取cookies。然而,我并没有看到我期望的所有饼干。我的代码如下: // Downloads login cookies for subsequent requests public async Task<CookieContainer> loginCookies() { var cookies = new CookieCont
// Downloads login cookies for subsequent requests
public async Task<CookieContainer> loginCookies()
{
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
UseCookies = true,
AllowAutoRedirect = true,
CookieContainer = cookies
};
var client = new HttpClient(handler);
var loginUri = new Uri("https://connect.example.edu/login.aspx");
var credentials = new Dictionary<string, string> {
{"example$txtUsername", this.Username},
{"example$txtPassword", this.Password}
};
var formCredentials = new FormUrlEncodedContent(credentials);
await client.PostAsync(loginUri, content: formCredentials);
var pointsUri = new Uri("https://info.example.edu/");
Console.WriteLine("COOKIES:");
foreach (Cookie cookie in cookies.GetCookies(pointsUri))
Console.WriteLine($"{cookie.Name} --> {cookie.Value}");
return cookies;
}
//为后续请求下载登录cookie
公共异步任务loginCookies()
{
var cookies=新的CookieContainer();
var handler=新的HttpClientHandler{
UseCookies=true,
AllowAutoRedirect=true,
CookieContainer=cookies
};
var client=新的HttpClient(处理程序);
var loginUri=新Uri(“https://connect.example.edu/login.aspx");
var凭证=新字典{
{“示例$txtUsername”,this.Username},
{“example$txtPassword”,this.Password}
};
var formCredentials=新FormUrlEncodedContent(凭证);
wait client.PostAsync(loginUri,内容:formCredentials);
var pointsUri=新Uri(“https://info.example.edu/");
控制台。WriteLine(“COOKIES”);
foreach(cookies中的cookies.GetCookies(pointsUri))
WriteLine($“{cookie.Name}-->{cookie.Value}”);
归还饼干;
}
我相信这个错误是由于loginUri
和pointsUri
有不同的子域造成的。我需要刮取的信息存在于pointsUri
页面,但登录存在于loginUri
我特别缺少的cookie是
ASP.NET\u SessionID
要在子域之间共享cookie,这些域的服务器代码可能应该设置cookie的域属性(例如,设置为.example.edu)。不管怎样,如果你能控制它。参考:我正试图刮现有的网站(我没有写)。我相信链接的站点是用于管理服务器端的cookie,对吗?你能发布第一个url的请求和响应吗?@davenportw15链接主要用于服务器端管理是的,因为行为良好的http客户端不会与另一个域(或子域)共享域的cookie。。也许你可以在不使用httpclient的情况下发出一个更原始的tcp请求,然后你可以缓存/刮取/重用任何你喜欢的东西。一路上,我发现中间重定向使用js提交表单作为刮取的预防措施。发布到该页面的结果设置了JSESSIONID,这在我看来很奇怪。那不是雄猫吗?@GerardoGrignoli,您是否需要任何特定信息?要在子域之间共享cookie,这些域的服务器代码可能应该设置cookie的域属性(例如,设置为.example.edu)。不管怎样,如果你能控制它。参考:我正试图刮现有的网站(我没有写)。我相信链接的站点是用于管理服务器端的cookie,对吗?你能发布第一个url的请求和响应吗?@davenportw15链接主要用于服务器端管理是的,因为行为良好的http客户端不会与另一个域(或子域)共享域的cookie。。也许你可以在不使用httpclient的情况下发出一个更原始的tcp请求,然后你可以缓存/刮取/重用任何你喜欢的东西。一路上,我发现中间重定向使用js提交表单作为刮取的预防措施。发布到该页面的结果设置了JSESSIONID,这在我看来很奇怪。那不是雄猫吗?你想要什么具体的信息吗,@GerardoGrignoli?