2010-06-04 3 views
23

Я создаю приложение для извлечения данных с веб-страницы. Страница защищена паролем и при входе пользователя в файл cookie.Как использовать файлы cookie с HttpWebRequest

Для извлечения данных, которые необходимо выполнить приложению, выполните следующие действия: сделайте веб-запрос с именем пользователя и паролем и сохраните файл cookie. Затем, когда файл cookie сохраняется, он должен быть добавлен в заголовки всех запросов.

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

public void getAsyncDailyPDPContextActivationDeactivation() 
    { 
     HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(dailyPDPContextActivationDeactivation); 

     IAsyncResult asyncResult = httpWebRequest.BeginGetResponse(null, null); 

     asyncResult.AsyncWaitHandle.WaitOne(); 

     using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult)) 
     using (StreamReader responseStreamReader = new StreamReader(httpWebResponse.GetResponseStream())) 
     { 
      string responseText = responseStreamReader.ReadToEnd(); 
     } 

    } 

Кто-нибудь знает, как изменить этот метод, чтобы добавить печенье в заголовок?

Ниже трафаретная печать структуры заголовка запроса, сделанного с браузером:

alt text http://img404.imageshack.us/img404/4793/cookiea.jpg

Я бы также благодарен, если кто-нибудь предложил способ хранить печенье из ответа (когда марки приложения запрос http: xxx.xxx.xxx/login? username = xxx & password = xxx cookie создан и должен храниться для будущих запросов).

ответ

32
CookieContainer cookieContainer = new CookieContainer(); 
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest.CookieContainer = cookieContainer; 

Тогда вы повторно использовать этот CookieContainer в последующих запросах:

HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest2.CookieContainer = cookieContainer; 
+1

Я не получить его на самом деле. Почему бы вы поместили недавно созданный файл cookiecontainer (поэтому он пуст) в запрос, который вы собираетесь отправить? Разве не должно быть логичнее, что вы должны позже заполнить этот файл cookieContainer ответом? Есть ли причина, по которой это так? edit: Множество ответов дается таким образом, но я просто не могу понять, почему это делается именно так. – deltu100

+0

Мое приложение имеет нежелательное поведение, используя это. Использование httpWebRequest2.Headers.Set («Cookie», ... отлично работает. – Eduardo

+0

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

Смежные вопросы