2015-02-04 4 views
0

. 나는 모든 것이 옳았지만 요청할 때마다 노력하고 있습니다. "쿠키를 사용할 수 없음"이라고 표시됩니다. 쿠키 컨테이너를 사용하고 있습니다. 여기에 내 코드입니다 : [어떤 도움을 크게 감상 할 수있다]의 HttpWebRequest POST 방법 [쿠키가 활성화되지] 나는 최근 HTTP 웹 요청 포스트 방법을 통해 source.amazon.com에 로그인하려고했습니다

희미한 tempCookies CookieContainer으로
희미한 logincookie CookieContainer
희미한 postData를 같이 문자열로 = "appActionToken = bPQVeahS2jIO4B1Cb7M53hzMOFEj3D & appAction = 로그인했습니다 & openid.pape .max_auth_age = 원숭이 %의 3AMA %의 차원 % 3D & openid.ns = 원숭이 %의 3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjA %의 3D & prevRID = 원숭이 %의 3AMTNKSlBHREM3WEJLOFZYRVI2QTA %의 3D & 페이지 id = 원숭이 %의 3Aa29yX2IyYnBvcnRhbF9uYQ %의 차원 % 3D & openid.ide ntity = 원숭이 %의 3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q % 3D & openid.claimed_id = 원숭이 %의 3AaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvaWRlbnRpZmllcl9zZWxlY3Q %의 3D & openid.mode = 원숭이 %의 3AY2hlY2tpZF9zZXR1cA %의 차원 % 3D & openid.assoc_handle = 원숭이 %의 3Aa29yX2IyYnBvcnRhbF9uYQ %의 차원 % 3D & marketPlaceId = 원숭이 % 3AQTFWMlNZTFRNUFAzNjI % 3D & 된 openid.return_to = 원숭이 %의 3AaHR0cHM6Ly9zb3VyY2UuYW1hem9uLmNvbS8jL2Rhc2hib2FyZA %의 3 차원 %가 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 "
희미한 encodin g 새로운 UTF8Encoding
어둡게 byteData의 HttpWebRequest = DirectCast로 바이트로() = encoding.GetBytes (postData를)
어둡게 postReq (이 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) 새로운 CookieContainer
postReq로서
희미한 tempCookies있다. 방법 = "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 = "모질라/5.0 (Windows; 유; Windows NT 6.1; ru; RV : 1.9.2.3) 게코/20100401 파이어 폭스/4.0 (.NET의 CLR 3.5.30729) 스트림 = postReq.GetRequestStream()
postreqstream.Write (byteData으로 "
postReq.ContentLength = byteData.Length
희미한 postreqstream, 0, byteData.Length)
postreqstream.Close()
어둡게 응답 후 HttpWebResponse
postresponse = DirectCast (postReq.문자열 = postreqreader.ReadToEnd
RichTextBox1.Text으로하는 GetResponse(), HttpWebResponse 클래스)
tempCookies.Add (postresponse.Cookies)
logincookie = tempCookies 새로운에서는 StreamReader (postresponse.GetResponseStream으로
희미한 postreqreader())
희미한 thepage = the 페이지

답변

1

저는 거의 똑같은 작업을하고 있습니다 ... 그리고 나는 약간의 진전을 이루었습니다. 코드 상단에 추가하십시오.

몇 가지를 (코드는 나중에 더 이상 변경하지 않고도 재사용 할 기본적으로 어떤이가 먼저 페이지를 방문 할 때 사용자가 수신 쿠키를 캡처하고있다,) ...

  1. 쿠키 컨테이너 선언을 맨 위로 이동하십시오.

  2. 여기서 "http://www.amazon.com"은 두 줄에서 변경해야 할 수도 있습니다.

  3. 필요한 UserAgent로 변경하십시오.

  4. 이 여전히 작동하지 않습니다 ... 때문에 .... Amazon의 리퍼러 링크 및 appActionToken 링크가 계속 변경되고 있습니다.

일단이 문제를 극복하고 나면 이러한 링크를 어떻게 든 실시간으로 잡을 수 있다면이 기능을 사용할 수 있어야합니다. 웹 요청이 도움이 될 수 있다고 생각합니다. 그런 다음 링크가 발행되는 즉시 변경 될 수 있습니다.

appActionToken과 같은 비 http : // 링크를 제공하는 다른 사이트에서이 작업을 수행하지만 링크는 정적이며 변경되지 않습니다. http : \ www.amazon.com이있는 도메인 (예 : http : \ www.website.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