0

我最近尝试通过 http web request post 方法登录 source.amazon.com。我一切正常,但每次我尝试创建请求时。我收到“未启用 Cookie”。我正在使用 cookie 容器,但仍然如此。这是我的代码:[任何帮助将不胜感激]

将 tempCookies 调暗为 CookieContainer
将 logincookie 调暗为 CookieContainer
Dim postData As String = "appActionToken=bPQVeahS2jIO4B1Cb7M53hzMOFEj3D&appAction=SIGNIN&openid.pape.max_auth_age=ape%3AMA%3D%3D&openid.ns=ape%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjA%3D&prevRID=ape%3AMTNKSlBHREM3WEJLOFZYRVI2QTA%3D&pageId=ape%3Aa29yX2IyYnBvcnRhbF9uYQ%3D%3D&openid.identity=ape% 3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q%3D&openid.claimed_id=ape%3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q%3D&openid.mode=ape%3AY2hlY2tpZF9zZXR1cA%3D%3D&openid.assoc_handle=ape%3Aa29yX2IyYnBvcnRhbF9uYQ%3D%3D&marketPlaceId=ape%3AQTFWMlNZTFRNUFAzNjI%3D&openid.return_to=ape%3AaHR0cHM6Ly9zb3VyY2UuYW1hem9uLmNvbS8jL2Rhc2hib2FyZA%3D%3D&email=EMAIL&create= 0&密码=密码&metadata1=OAL6NohRZ7zCHzgzUIxnrUVUf8OJ%2F%2BSqjeyfxKqF7GP%2B8P4eei5ozS7eVbWpYaxOJ0pZmsgS7uNT7yWrk0eN5XHYn%2FsM6nm4dgGOaXwTA7sOwm8YMUizaxcmZakGUhGnHk%2BJ5hyEIVMDk0CZTP8IZrstTyPlpkQERj5c3b4y2JrbWgLVu0PaYTF1xunw1aSWobbEw9aaO3%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 encoding As New 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
将 postreqstream 调暗为 Stream = postReq.GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
将 postresponse 调暗为 HttpWebResponse
postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
tempCookies.Add(postresponse.Cookies )
logincookie = tempCookies 将 postreqreader 调
暗为新 StreamReader(postresponse.GetResponseStream())
将页面调暗为 String = postreqreader.ReadToEnd
RichTextBox1.Text = thepage

4

1 回答 1

1

我一直在做几乎完全相同的事情……而且我取得了一些进展。将此添加到代码的顶部。(基本上这是在捕获您第一次访问该页面时收到的 cookie,您的代码稍后将重用它,而无需您进行任何进一步的更改)

一些东西...

  1. 将您的 cookie 容器声明移至最顶部。

  2. 我有“ http://www.amazon.com ”的地方可能需要在这两行中进行更改。

  3. 将 UserAgent 更改为您需要的内容。

  4. 这仍然不起作用……因为……亚马逊的引荐来源链接和 appActionToken 链接在不断变化。

一旦我们克服了这个问题,我们应该能够让它工作,如果有可能以某种方式实时捕获这些链接。我在想一个网络请求可能会有所帮助,然后链接一旦发出就可能会改变。

我得到了另一个站点,该站点提供了一个非 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

于 2015-02-19T10:37:32.950 回答