2015-02-04 25 views
0

我最近试图通过http web请求post方法登录到source.amazon.com。我已经准备好了,但每次尝试创建请求。我收到“Cookies未启用”。我正在使用cookie容器,但仍然是。这里是我的代码: [任何帮助,将不胜感激]Httpwebrequest POST方法[Cookies未启用]

昏暗tempCookies作为的CookieContainer
昏暗logincookie作为的CookieContainer
昏暗POSTDATA的String =“appActionToken = bPQVeahS2jIO4B1Cb7M53hzMOFEj3D & appAction =登入& openid.pape .max_auth_age =猿%3AMA%3D%3D & openid.ns =猿%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjA%3D & prevRID =猿%3AMTNKSlBHREM3WEJLOFZYRVI2QTA%3D & PAGEID =猿%3Aa29yX2IyYnBvcnRhbF9uYQ%3D%3D & openid.ide ntity =猿%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q%3D & openid.claimed_id =猿%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q%3D & openid.mode =猿%3AY2hlY2tpZF9zZXR1cA%3D%3D & openid.assoc_handle =猿%3Aa29yX2IyYnBvcnRhbF9uYQ%3D%3D & marketPlaceId =猿%3AQTFWMlNZTFRNUFAzNjI%3D & openid.return_to =猿%3AaHR0cHM6Ly9zb3VyY2UuYW1hem9uLmNvbS8jL2Rhc2hib2FyZA%3D%3D &电子邮件=电子邮件&创建= 0 &密码= PASSWORD & metadata1 = OAL6NohRZ7zCHzgzUIxnrUVUf8OJ%2F%2BSqjeyfxKqF7GP%2B8P4eei5ozS7eVbWpYaxOJ0pZmsgS7uNT7yWrk0eN5XHYn%2FsM6nm4dgGOaXwTA7sOwm8YMUizaxcmZakGUhGnHk%2BJ5hyEIVMDk0CZTP8IZrstTyPlpkQERj5c3b4y2JrbWgLVu0PaYTF1xunw1aSWobbEw9aaO3%2FSXUL6KmTkHYTaJ%2BX3rnqdkykYeVX7%2FSD%2FW q1sRaJ6y3eymefpoKRfbeYNqmpPbuVrgDKickIfy%2BTfUpeVm2H0uuUawHf6lhuhX4NJbsQZBMR9hPN631Ulufr%2FRWfMTS8SXY%2BI9F8H9HT%2F8gsYSdSR8W3umRmGjDZeD1melAJLSbVoIx3%2B2tSTSqlJ6wG0%2F9Pi7RIL5BQHQuEPg%2FRoGjWbZj60kfOirI59pn91r%2FtNFJKP2EXE7G14rcT57zu25UEg2QEE20Br668jhjOwR0I47CERdXFDdINPxH5rfDIbRM4Axm1fdfSF08S1DeTI9Yq4H%2BNWvtn%2Bsu%2FfL5un3b7JWNOKcZHRRbj8%2FKhg2LssGOwc9S4yiDiiGuFdkxlMawc9Pn3ewddTQkPtOz6PgMQENr6udpvNLaEyMKA7T2KWE2SacabX2OiJbkh04lp5wuoM4n86G9eP0yHAk1TZxKQc%2B2vYyoUJHxojLXqKREi5O%2Fv5lBpeN%2Bk6jQMZjF7MbQbxefAWlQ%2BljSbZ2bug7axwPdTAlBs239z8zMpOBG0y4%2F47iyMViymqYPKPDoS3%2BZN47baYUVDdp1mUbS71LO74YKaEJEjdfNeT%2B5faXblFCI2e39PSZa%2FlnvNvQU%2Bmkz%2BQDmn2kk62X5tio15DsGp%2FS3Nm3z3XImRlqLsxgqXSzApKPtK6OtHLqGIc5WWpJOXGPqcIMQ2aUuJaMmHfulzPNM06T6Tbp470xznqGwzwHYtEAN3%2FnnvCqsKs2i05yFKpsn1rpXEG5MjtMHth3uXBfItT61xuweapDYR4rqGBCAjNWooUe4Nlvpg2B42scDubRunuYzu7FlcmprrBxhqK1C9xJFC4gHVktX3NaKvTHMWa3gFlWq% 2FEsP6ZBgNixtC3VmJKm7OvdzRxelw%3D“
Dim encodin克作为新UTF8Encoding
昏暗byteData作为字节()= encoding.GetBytes(POSTDATA)
昏暗postReq作为HttpWebRequest的= DirectCast(WebRequest.Create( “https://source.amazon.com/ap/signin?ie=UTF8&openid.pape.max_auth_age=0&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.assoc_handle=kor_b2bportal_na&marketPlaceId=A1V2SYLTMPP362&openid.return_to=https%3A%2F%2Fsource.amazon.com%2F%23%2Fdashboard”),HttpWebRequest的)
昏暗tempCookies作为新的CookieContainer
postReq。方法= “POST”
postReq.CookieContainer = tempCookies
postReq.KeepAlive =真
postReq.ContentType = “应用/ XHTML + xml” 的
postReq.Referer = “https://source.amazon.com/ap/signin?ie=UTF8&openid.pape.max_auth_age=0&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.assoc_handle=kor_b2bportal_na&marketPlaceId=A1V2SYLTMPP362&openid.return_to=https%3A%2F%2Fsource.amazon.com%2F%23%2Fdashboard
postReq.UserAgent =“的Mozilla/5.0(Windows; U; Windows NT 6.1;如; RV:1.9.2.3)壁虎/ 20100401火狐/ 4.0(.NET CLR 3.5.30729)”
postReq.ContentLength = byteData.Length
昏暗postreqstream作为物流= postReq.GetRequestStream()
postreqstream.Write(byteData, 0,byteData.Length)
postreqstream.Close()
Dim postresponse As HttpWebResponse
postresponse = DirectCast(postReq。的GetResponse(),HttpWebResponse)
tempCookies.Add(postresponse.Cookies)
logincookie = tempCookies
昏暗postreqreader作为新的StreamReader(postresponse.GetResponseStream())
昏暗拖到绘图页作为字符串= postreqreader.ReadToEnd
RichTextBox1.Text = thepage

回答

1

我一直在研究几乎完全相同的事情......我取得了一些进展。 将此添加到代码的顶部。 (基本上这是什么东西做的是捕捉您收到当您第一次访问该页面一个cookie,你的代码将在以后重新使用它,您无需进行任何进一步的修改)

一些东西......

  1. 将您的cookie容器声明移动到最顶端。

  2. 我可能需要在两行中都更改“http://www.amazon.com”。

  3. 将UserAgent更改为您所需的。

  4. 这仍然不工作......因为...... 亚马逊的referrer链接和appActionToken链接不断变化。

一旦我们克服了这个问题,我们应该能够得到这个工作,如果它可能以某种方式实时捕获这些链接。 我在考虑webrequest可能会有所帮助,然后链接可能会在发布后立即更改。

我得到了这个工作的另一个网站,给出一个非http://链接,如appActionToken是,但他们的链接是静态的,不会改变。 我能够使用他们的域名(即:http:\ www.website.com),我在那里放置了http:\ www.amazon.com。尽管此链接可能需要更改为其登录页面。

如果您有任何进一步的进展,我很乐意听到它!

Dim tempcookie As New CookieContainer 
 

 
     Dim postreq1 As HttpWebRequest = DirectCast(WebRequest.Create("http://www.amazon.com"), HttpWebRequest) 
 
     Dim postresponse1 As HttpWebResponse 
 
     postresponse1 = DirectCast(postreq1.GetResponse(), HttpWebResponse) 
 
     postreq1 = DirectCast(HttpWebRequest.Create("http://www.amazon.com"), HttpWebRequest) 
 
     postreq1.UserAgent = "mozilla/5.0 (windows nt 5.1) applewebkit/537.36 (khtml, like gecko) chrome/40.0.2214.111 safari/537.36" 
 
     postreq1.Timeout = 60000 
 
     postreq1.CookieContainer = tempcookie 
 
     postreq1.Method = "get" 
 
     postreq1.AllowAutoRedirect = True 
 
     postreq1.ContentType = "application/x-www-form-urlencoded" 
 

 
     postresponse1 = DirectCast(postreq1.GetResponse(), HttpWebResponse) 
 

 

 

 
     Dim datastream As Stream = postresponse1.GetResponseStream() 
 
     Dim reader As New StreamReader(datastream) 
 
     Dim responsefromserver As String = reader.ReadToEnd()

也底部3线可以是或可以不是必需的。

这是我的其他代码以防万一。

Dim postdata As String = "appActionTokenXXXXXXXXXXXXXXX THIS CHANGES" 
 
     'Dim tempcookie As New CookieContainer 
 
     Dim encoding As New UTF8Encoding 
 
     Dim bytesdata As Byte() = encoding.GetBytes(postdata) 
 
     Dim postreq As HttpWebRequest = DirectCast(WebRequest.Create("https://www.amazon.com/XXXXX - THESE CHANGE"), HttpWebRequest) 
 

 
     postreq.Method = "POST" 
 
     postreq.KeepAlive = True 
 
     postreq.CookieContainer = tempcookie 
 
     postreq.ContentType = "application/x-www-form-urlencoded" 
 
     postreq.Referer = "https://www.amazon.com/XXXXX - THESE CHANGE" 
 

 
     postreq.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" 
 
     postreq.ContentLength = bytesdata.Length 
 

 
     Dim postreqstream As Stream = postreq.GetRequestStream() 
 
     postreqstream.Write(bytesdata, 0, bytesdata.Length) 
 
     postreqstream.Close() 
 
     Dim postresponse As HttpWebResponse 
 
     postresponse = DirectCast(postreq.GetResponse(), HttpWebResponse) 
 
     tempcookie.Add(postresponse.Cookies) 
 
     logincookie = tempcookie 
 
     Dim postreqreader As New StreamReader(postresponse.GetResponseStream()) 
 
     Dim thepage As String = postreqreader.ReadToEnd 
 
     RichTextBox1.Text = thepage

Imports System.Net 
 
Imports System.IO 
 
Imports System.Text