2010-06-04 31 views
23

Tôi đang tạo một ứng dụng để truy xuất dữ liệu từ trang web. Trang được bảo vệ bằng mật khẩu và khi người dùng đăng nhập vào cookie được tạo.cách sử dụng cookie với HttpWebRequest

Để truy xuất dữ liệu ứng dụng trước tiên phải đăng nhập: thực hiện yêu cầu web bằng tên người dùng và mật khẩu và lưu trữ cookie. Sau đó, khi cookie được lưu trữ, nó phải được thêm vào các tiêu đề của tất cả các yêu cầu.

đây là phương pháp mà đưa ra yêu cầu và khôi phục các nội dung:

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(); 
     } 

    } 

Có ai biết làm thế nào để thay đổi phương pháp này để thêm một cookie vào tiêu đề?

Dưới đây là màn hình in của cấu trúc header của yêu cầu thực hiện với trình duyệt:

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

tôi sẽ cũng biết ơn nếu có ai đề nghị một cách để lưu trữ cookie từ phản ứng (khi làm cho ứng dụng một yêu cầu http: xxx.xxx.xxx/login? username = xxx & mật khẩu = xxx cookie được tạo và phải được lưu trữ cho các yêu cầu trong tương lai).

Trả lời

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

Sau đó, bạn sử dụng lại CookieContainer này trong các yêu cầu sau:

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

Tôi không nhận được nó thực sự. Tại sao bạn đặt một dụng cụ nấu ăn mới nấu (vì vậy nó trống) vào yêu cầu bạn sắp gửi? Không phải là nó có được một lôgic hợp lý hơn rằng nó bạn phải điền vào đó cookieContainer sau này với phản ứng? Có một lý do nào đó theo cách này? chỉnh sửa: Rất nhiều câu trả lời được đưa ra theo cách này, nhưng tôi chỉ không thể tìm ra lý do tại sao nó được thực hiện theo cách này. – deltu100

+0

Ứng dụng của tôi có hành vi không mong muốn khi sử dụng. Sử dụng httpWebRequest2.Headers.Set ("Cookie", ... hoạt động tốt – Eduardo

+0

Nếu tôi đã đăng nhập vào trang web trước đó, có một cookie được lưu trữ trên HD của tôi để tôi có thể bỏ qua đăng nhập theo chương trình. yêu cầu web tự động tìm kiếm và điền nội dung chứa cookie đã tìm thấy hoặc bạn phải làm điều đó theo cách thủ công? Làm thế nào để thực hiện điều đó, nếu sau? –

Các vấn đề liên quan