Httpwebrequest POST方法[未启用Cookies]

时间:2015-02-04 18:43:19

标签: cookies vb.net-2010 system.net.httpwebrequest

我最近尝试通过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

1 个答案:

答案 0 :(得分:1)

我一直在做同样的事情......我已经取得了一些进展。 将其添加到代码的顶部。 (基本上这样做是为了捕获您第一次访问该页面时收到的cookie,您的代码将在以后重复使用,而无需进行任何进一步的更改)

一些事情......

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

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

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

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

  5. 一旦我们克服了这个问题,我们应该能够让它工作,如果它可以以某种方式实时捕捉这些链接。 我认为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