HTTPS C#POST 302已移动

时间:2009-06-22 15:51:18

标签: c# https httpwebrequest http-status-code-302

我正在尝试创建一个登录网页并抓取报告的脚本 - 所有工作都非常有效 - 除了 - 我正在获取

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://登录网站,但后来我又回来了?

2 个答案:

答案 0 :(得分:4)

我长期坚持这个问题 - 很高兴我能帮忙。阅读这篇文章

http://www.byteblocks.com/page/How-to-submit-requests-to-web-sites-programatically-using-HttpWebRequest.aspx

关键问题是你不能使用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工作。