C# 发布到WebResponse返回的页面
我使用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/关系/ 最后一个是我需要点击一个按钮的地方。我是不是应该检查一下所有这些东西,然后收集饼干?晚饭后我会试试,然后告诉你。我觉得这样行得通。我会在一点点更新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
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。无法使其工作,但我认为这是正确的答案。