2011-11-23 7 views
2

나는 HttpWebRequest에 관해 많은 질문을했습니다. 그러나, 나는 가지고있는 문제에 대한 답을 찾을 수 없다.쿠키로 리디렉션 HttpWebRequest

브라우저가 URL을 리디렉션하는 방식을 모방해야합니다. 내 코드는 아래의 URL에 대해 잘 작동하지만 :

내 코드 : 코드에 의해

GET http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank& HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-GB 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 
Host: ad2.adfarm1.adition.com 
Cookie: fc3=101c3; co=1; UserID1=19177152736; lv_248940=w=470167|t=1321974830; lv_249431=w=125082|t=1321974853; lc_253598=w=404178|t=1321977996 

피들러 요청 :

GET http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank& HTTP/1.1 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-GB 
Accept-Encoding: gzip, deflate 
Host: ad2.adfarm1.adition.com 
Connection: Keep-Alive 
IE, 요청에 의해

sURL = "http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank&"; 
CookieContainer oCookies = new CookieContainer(); 
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(sURL); 
myHttpWebRequest.CookieContainer = oCookies; 
myHttpWebRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";  
myHttpWebRequest.Accept = "text/html, application/xhtml+xml, */*"; 
myHttpWebRequest.Headers["Accept-Language"] = "en-GB"; 
myHttpWebRequest.Headers["Accept-Encoding"] = "gzip, deflate"; 

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
sNewURL = myHttpWebResponse.GetResponseHeader("Location"); 

피들러 IE에서

피들러, 응답 :

코드에 의해

피들러를 응답 : 당신이 볼 수 있듯이

HTTP/1.1 302 Found 
Server: ADITIONSERVER v1.0 
Date: Tue, 22 Nov 2011 18:07:39 +0100 
Connection: close 
Content-Type: text/plain 
Location: http://ad2.adfarm1.adition.com:80/redi?co=1&bid=847344&c=33349&keyword=&kid=253598&lid=689397953768&sid=404178&sr=0&clickurl=%26ClickTarget%3D%5Fblank%26 
P3P: policyref="http://imagesrv.adition.com/w3c/p3p.xml",CP="NOI DSP COR NID ADMo OUR NOR COM" 
Set-Cookie: co=1; expires=Wed, 01-Jan-2025 00:00:00 GMT; path=/; domain=.adfarm1.adition.com 

, 나는 코드에서 가져온 위치 값은 IE 다릅니다. 내가 Fiddler에게서 볼 수있는 유일한 차이점은 요청에 의해 쿠키가 전송되지 않았기 때문입니다. 그러나 그 쿠키는 어디에서 오며 어떻게 설정할 수 있습니까?

많은 감사,

+1

당신이 당신의 요청을 시도 할 때 쿠키가 없었어요 당신의 IE를 확인 했습니까? – Filburt

답변

1

IE가 설정-Cookie 헤더로 응답 이전 요청 동안 세션에서 또는 HD에 저장되어 있어야 사용하는 경우가 전송되는 쿠키.

초기 요청과 함께 보낼 쿠키를 수동으로 설정하려면 다음과 같이하십시오.

CookieContainer oCookies = new CookieContainer(); 
      CookieCollection cookieGroup = new CookieCollection(); 
      Cookie userId = new Cookie("UserID1","19177152736", "/", ".adfarm1.adition.com"); 
      cookieGroup.Add(userId); 
      oCookies.Add(cookieGroup); 

다음과 같이 HTTPWebRequest에 추가하십시오. 당신이 어떤 후속 요청에 쿠키를 포함 할 경우

myHttpWebRequest.CookieContainer = oCookies; 

그냥 httpWebRequests CookieContainer가 oCookies로 설정해야합니다.

0

초기 요청에서 쿠키를 설정하거나 보내지 않아도된다고 생각합니다.

혹시 그 URL을 방문한 적이 없다면 쿠키가 없어야합니다.

나는 HttpRequestObject를 통해 웹을 긁어 모으고 내가 기억할 수있는 것으로부터 쿠키를 설정할 필요가 전혀 없다.

귀하의 CookieContainer 객체는 첫 번째 응답에서 채워질 것이므로 향후 상태 유지를 위해이 요청을 사용할 것입니다.

캐시를 지우고 정확하게 바이올린과 일치 할 때까지 요청을 수정합니다.

또한 리디렉션이 처리되어 응답에서 캡처 된 것을 기억할 수 있습니다.

내가 집에 돌아 왔을 때 몇 가지 코드를 살펴보고 가능한 경우 추가 도움을 게시합니다.