C# 发布到WebResponse返回的页面

C# 发布到WebResponse返回的页面,c#,httpwebrequest,flickr,httpwebresponse,yahoo-oauth,C#,Httpwebrequest,Flickr,Httpwebresponse,Yahoo Oauth,我使用WebRequest发布到一个登录页面,该页面将我重定向到我真正需要发布的页面 我怎样才能发布到我被重定向到的这个页面?代码如下: *****新东西***** 以下是我发布到登录页面后发生的情况: GET/config/validate?.src=flickr&.pc=5134&.scrumb=6l14Ni2Pz3j&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=http%3A%2F%2Fwww.flickr.com

我使用WebRequest发布到一个登录页面,该页面将我重定向到我真正需要发布的页面

我怎样才能发布到我被重定向到的这个页面?代码如下:

*****新东西*****

以下是我发布到登录页面后发生的情况: GET/config/validate?.src=flickr&.pc=5134&.scrumb=6l14Ni2Pz3j&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=http%3A%2F%2Fwww.flickr.com%2Fsignin%2Fyahoo%2F%3frier%3D%252Fpeople%252frindieb68%252Frelationship%252F

GET/signin/yahoo/?redir=%2Fpeople%2Flindieb68%2Frelationship%

GET/cookie\u check.gne?通过=%2Fpeople%2Flindieb68%2Frelationship%2F&fail=register\u cookies.gne

GET/people/lindieb68/关系/

最后一个是我需要点击一个按钮的地方。我是不是应该检查一下所有这些东西,然后收集饼干?晚饭后我会试试,然后告诉你。我觉得这样行得通。我会在一点点更新

        private CookieContainer LoginYahoo(CookieContainer cookies)
        {
            string appURL = "https://login.yahoo.com/config/login?.src=flickr&.pc=5134&.scrumb=0&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252Flindieb68%25252Frelationship%25252F&rl=1";
            string strPostData = ".tries=1&.src=flickr&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=0delt5h5l4df0&.v=0&.challenge=3DZF0DFFqdE0m.9MWnCq6LjUZ9gV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252Flindieb68%25252Frelationship%25252F&.pd=flickr_ver%3D0%26c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26ivt%3D%26sg%3D&login=loginName&passwd=Password&.persistent=y&.save=Sign+In";

            // Setup the http request.
            HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as
            HttpWebRequest;
            wrWebRequest.Method = "POST";
            wrWebRequest.ContentLength = strPostData.Length;
            wrWebRequest.ContentType = "application/x-www-form-urlencoded";
            CookieContainer cookieContainer = cookies;
            wrWebRequest.CookieContainer = cookieContainer; 

            // Post to the login form.
            StreamWriter swRequestWriter = new
            StreamWriter(wrWebRequest.GetRequestStream());
            swRequestWriter.Write(strPostData);
            swRequestWriter.Close();

            // Get the response.
            HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

            // Read the response
            StreamReader srResponseReader = new
            StreamReader(hwrWebResponse.GetResponseStream());
            string strResponseData = srResponseReader.ReadToEnd();
            srResponseReader.Close();

            //YOU ARE NOW LOGGED IN TO YAHOO!
            //NEED TO POST AGAIN TO WHAT hwrWebResponse RETURNS
            ShowInBrowser(strResponseData);
            return cookieContainer;
        }

将HttpWebREquest实例上的AllowAutoRedirect设置为true。

收集以前(登录)响应中的所有cookie,因为其中至少有一个cookie会告诉Yahoo您已经登录。然后将cookies与您的post请求一起添加到目标页面,或者与Yahoo进行任何其他交互

编辑:有关收集和重新使用cookie的完整代码示例,请参阅本文。

这越来越复杂了


简单的答案似乎是收集饼干。但由于某些原因,我做不到。

仅仅用不同的url调用您已有的代码是否更复杂?是的。当我这样做时,它会试图让我再次登录。这让我回到了起点。此外,AllowAutoRedirect也是正确的。它将我重定向到我想去的地方。我只是不知道如何把东西发到它把我重定向到的地方。就像我说的,如果我尝试直接访问页面,它会让我再次登录。我在代码中的url处登录。我需要单击“”处的按钮。这个发布的代码会将我重定向到那里,但在你登录并尝试去那里后,它会再次要求输入密码。顺便说一句,这是世界上最好的网站。今天才开始使用。提问和回答问题很有趣。几乎就像玩魔兽世界一样,但是为了编程和完成任务而不是浪费=Dso你得到的响应是一个页面,在这个页面上,一个人通常会点击一个按钮,但是你正在尝试编写模仿这种行为的代码?您实际上是在浏览器中显示返回的页面(我想是通过ShowInBrowser函数调用)还是要解析返回的字符串并创建与实际用户相同的post请求?创建与实际用户相同的post请求我只是在使用ShowBrowser(),这显示了WebBrowser中的目的地,以查看它要去哪里……这实际上是我以前遇到的问题的遗留问题。我要去收集饼干,看看会发生什么。大约20分钟后回来,是的。它正在重定向到我需要单击提交按钮的页面。我只是不知道如何发布到它重定向到我的页面。当我尝试直接访问它时,它会使我再次登录。当您将autoredirect设置为true时,它是否会沿其路径收集cookie?比如,如果它重定向,然后再重定向,如果有cookie,它会在每个站点拾取cookie吗?或者你必须手动操作吗?无论哪种方式,我都无法让它工作。使用Fiddler(或其他HTTP调试代理)从浏览器的正常登录中捕获流量。然后确认您的编程请求包含相同的cookies。无法使其工作,但我认为这是正确的答案。