我正在尝试创建一个登录网页并抓取报告的脚本 - 所有工作都非常有效 - 除了 - 我正在获取
HTTP/1.1 302 MovedTemporarily
Date: Mon, 22 Jun 2009 13:22:04 GMT
Server: Server
x-some-id-1: 0J3X3VBBCGNJG9V46G5D
x-some-id-2: BtQ4SsDhbryWgiVNFcVpMbt898GuPIBaWuGwAWjvsyI=
Set-cookie: session-id-time=1246258800l; path=/; domain=.example.com; expires=Mon Jun 29 07:00:00 2009 GMT
Set-cookie: session-id=179-5933843-4704124; path=/; domain=. example.com; expires=Mon Jun 29 07:00:00 2009 GMT
Location: https://example.com
Vary: Accept-Encoding,User-Agent
nnCoection: close
Content-Type: text/html; charset=UTF-8
Content-Length: 0
回复,我不知道如何阻止它。我试过设置
httpwebrequest.allowautoredirect“True”和“False”都没有帮助。
它让我发疯,因为我可以通过https://登录网站,但后来我又回来了?
答案 0 :(得分:4)
我长期坚持这个问题 - 很高兴我能帮忙。阅读这篇文章
关键问题是你不能使用HttpWebRequest启用自动重定向来执行涉及302s和cookie的登录过程,因为cookie在整个过程结束之前不会被设置。
解决方案是禁用自动重定向并逐步手动实施整个登录过程(获取302重定向响应的'Location'标头,以及'Set-cookie'标头,并通过根据需要进行连续步骤。
您的cookie容器需要一路抓取所有cookie并在最后提交。如果你得到一个302 - 你会碰到你的头撞墙,想知道为什么你一直在登录页面。
答案 1 :(得分:2)
我知道,这个问题已经过时了,但谷歌指出这里。所以,这是WebClient
的另一种解决方案。
public class CookieAwareWebClient : WebClient
{
private CookieContainer cookie = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = cookie;
(request as HttpWebRequest).UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1300.0 Iron/23.0.1300.0 Safari/537.11";
}
return request;
}
}
然后创建WebClient
对象CookieAwareWebClient wc = new CookieAwareWebClient();
并执行您需要的任何操作。
编辑:也可以通过HTTP和HTTPS工作。