我最近尝试通过http web request post方法登录source.amazon.com。我已经把一切都做对了,但每当我尝试创建请求时。我得到" Cookie未启用"。我还在使用cookie容器。这是我的代码: [非常感谢任何帮助]
Dim tempCookies作为CookieContainer
Dim logincookie作为CookieContainer
暗淡POSTDATA作为字符串=" appActionToken = bPQVeahS2jIO4B1Cb7M53hzMOFEj3D&安培; appAction =登入&安培; openid.pape.max_auth_age =猿%3AMA%3D%3D&安培; openid.ns =猿%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjA%3D&安培; prevRID =猿%3AMTNKSlBHREM3WEJLOFZYRVI2QTA%3D&安培; PAGEID =猿%3Aa29yX2IyYnBvcnRhbF9uYQ%3D%3D&安培; openid.identity =猿%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&安培;电子邮件= EMAIL&安培;创建= 0&安培;密码= PASSWORD&安培; metadata1 = OAL6NohRZ7zCHzgzUIxnrUVUf8OJ%2F%2BSqjeyfxKqF7GP%2B8P4eei5ozS7eVbWpYaxOJ0pZmsgS7uNT7yWrk0eN5XHYn%2FsM6nm4dgGOaXwTA7sOwm8YMUizaxcmZakGUhGnHk%2BJ5hyEIVMDk0CZTP8IZrstTyPlpkQERj5c3b4y2JrbWgLVu0PaYTF1xunw1 aSWobbEw9aaO3%2FSXUL6KmTkHYTaJ%2BX3rnqdkykYeVX7%2FSD%2FWq1sRaJ6y3eymefpoKRfbeYNqmpPbuVrgDKickIfy%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编码为新的UTF8Encoding
Dim byteData As Byte()= encoding.GetBytes(postData)
Dim postReq As 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.Method =" POST"
postReq.CookieContainer = tempCookies
postReq.KeepAlive = True
postReq.ContentType =" application / 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; ru; rv:1.9.2.3)Gecko / 20100401 Firefox / 4.0(.NET CLR 3.5.30729)"
postReq.ContentLength = byteData.Length
Dim postreqstream As Stream = 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
Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
将页面调暗为String = postreqreader.ReadToEnd
RichTextBox1.Text = thepage
答案 0 :(得分:1)
我一直在做同样的事情......我已经取得了一些进展。 将其添加到代码的顶部。 (基本上这样做是为了捕获您第一次访问该页面时收到的cookie,您的代码将在以后重复使用,而无需进行任何进一步的更改)
一些事情......
将您的cookie容器声明移至最顶端。
我可能需要在两行中更改“http://www.amazon.com”。
将UserAgent更改为您需要的内容。
这仍然不起作用......因为.... 亚马逊的引荐来源链接和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