HttpWebRequest перенаправить с куки - PullRequest
2 голосов
/ 23 ноября 2011

Я знаю, что было задано много вопросов о HttpWebRequest. Однако я не могу найти ответ на проблему, с которой я столкнулся.

Мне нужно, чтобы браузеры перенаправляли URL-адреса. Мой код работает нормально, но не для URL ниже:

Мой код:

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");

Fiddler от IE, Запрос:

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

Fiddler от IE, Ответ:

HTTP/1.1 302 Found
Server: ADITIONSERVER v1.0
Date: Tue, 22 Nov 2011 17:37:39 +0100
Connection: close
Content-Type: text/plain
Location: &ClickTarget=_blank&
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
Set-Cookie: UserID1=19177152736; expires=Sun, 20-May-2012 18:37:39 GMT; path=/; domain=.adfarm1.adition.com
Set-Cookie: lc_253598=w=404178|t=1321979859; expires=Tue, 22-Nov-2011 18:07:39 GMT; path=/; domain=.adfarm1.adition.com

Скрипач по коду, Ответ:

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, заключается в том, что файлы cookie не отправляются по запросу. Однако, откуда эти куки и как их установить?

Большое спасибо,

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Файлы cookie, которые он отправляет при использовании IE, должны быть сохранены в вашем сеансе или на вашем жестком диске во время предыдущего запроса, который ответил заголовком Set-Cookie.

Если вы хотите вручную настроить файлы cookie для отправки с вашим первоначальным запросом, вы должны сделать что-то вроде этого.

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;

Если вы хотите включить файлы cookie в любые последующие запросы, просто установите для httpWebRequests CookieContainer значение oCookies.

0 голосов
/ 23 ноября 2011

Я думаю, вам не нужно устанавливать или отправлять файлы cookie из вашего первоначального запроса.

Если вы никогда не заходили на этот URL, у вас не должно быть файлов cookie от него.

Я проделал тонну очистки веб-страниц через объект HttpRequestObject, и, насколько я помню, мне никогда не требовалось устанавливать какие-либо файлы cookie.

Ваш объект CookieContainer будет заполнен из первого ответа, и вы будете использоватьчто в будущих запросах на поддержание состояния.

Я бы очистил ваш кэш и изменил ваш запрос, пока он не совпадет точно с фиддлером.

Кроме того, из того, что я могу вспомнить, перенаправления обрабатываются и фиксируютсяответ.

Когда я вернусь домой, я посмотрю какой-нибудь код и выложу любую дополнительную помощь, если смогу.

  • Джон
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...