2010-05-13 7 views
22

Tôi đang tải trang web bằng cách sử dụng chức năng Điều hướng của WebBrowser và tôi muốn trình duyệt tải trang bằng cookie mà tôi đã cung cấp.Đặt cookie trong điều khiển WebBrowser

Các mã sau đây không làm việc:

wb.Navigate(url, null, null, "Cookie: " + cookie + "\n"); 

Tôi đang làm gì sai? Tôi có phải sử dụng InternetSetCookie không? Điều này dường như không phải là giải pháp tốt nhất.

+0

Bạn có tìm thấy câu trả lời cho điều này không? –

+0

Thật không may, không. –

Trả lời

19

Hình như có một cách tốt hơn:

nhập các InternetSetCookie chức năng:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
static extern bool InternetSetCookie(string lpszUrlName, string lpszCookieName, string lpszCookieData); 

Tạo đối tượng Cookie:

Cookie temp1 = new Cookie("KEY1", "VALUE1", "/Path/To/My/App", "/"); 

Gọi InternetSetCookie chức năng để thiết lập cookie cho URL đó

InternetSetCookie("https://my.url.com/Path/To/My/App", null, temp1.ToString() + "; expires = Sun, 01-Jan-2013 00:00:00 GMT"); 

Navigate số WebBrowser đến URL bạn muốn truy cập.

webBrowser1.Navigate("https://my.url.com/Path/To/My/App"); 

Hãy nghĩ đây là giải pháp tốt nhất cho vấn đề :).

+1

Đối với bất kỳ ai cố gắng lấy phần 'hết hạn =' từ đối tượng DateTime, dưới đây là cách thực hiện: myDateTimeObj.ToUniversalTime().ToString("ddd, dd-MMM-yyyy HH:mm:ss") + " GMT" Daniel

+0

Liên kết đã chết, nhưng may mắn là bạn đã dán mã! – TEK

+0

Nếu bạn chỉ cần đặt cookie trong bộ nhớ cho phiên, bạn có thể gọi trực tiếp: InternetSetCookieEx ("https://my.url.com/Path/To/My/App", "KEY1", "VALUE1" , NULL NULL). Lưu ý: có sự khác biệt giữa việc gọi InternetSetCookie và InternetSetCookieEx (http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx). Trong thực tế, tôi đã quan sát thấy rằng bất kỳ yêu cầu tiếp theo nào được thực hiện bởi trang chỉ chứa cookie nếu bạn sử dụng phương thức "Ex". –

3

The proper way is using InternetSetCookieEx.

[DllImport("wininet.dll")] 
static extern InternetCookieState InternetSetCookieEx(
    string lpszURL, 
    string lpszCookieName, 
    string lpszCookieData, 
    int dwFlags, 
    int dwReserved); 

enum InternetCookieState : int 
{ 
    COOKIE_STATE_UNKNOWN = 0x0, 
    COOKIE_STATE_ACCEPT = 0x1, 
    COOKIE_STATE_PROMPT = 0x2, 
    COOKIE_STATE_LEASH = 0x3, 
    COOKIE_STATE_DOWNGRADE = 0x4, 
    COOKIE_STATE_REJECT = 0x5, 
    COOKIE_STATE_MAX = COOKIE_STATE_REJECT 
} 

Dưới đây là một số mã để kiểm tra nó ở một website that shows your HTTP headers.

InternetSetCookieEx("http://request.urih.com/", null, "TestData=Test;", 0, 0); 
webBrowser1.Navigate("http://request.urih.com/"); 
+0

Tôi đang nhận các cookie trùng lặp khi thực hiện việc này. Đã thử miền cookie có và không có dấu gạch chéo. đã thử giá trị có và không có dấu chấm phẩy. Đã cố gắng không cắt tỉa cặp tên/giá trị và cắt tỉa. Tôi chỉ tự hỏi nếu trong sản xuất bạn tìm thấy một vấn đề, cố định các thiết lập của các tập tin cookie và có lẽ không cập nhật câu trả lời của bạn. –

+0

Để làm rõ, khi tôi đặt cookie tôi đã lưu trong cơ sở dữ liệu và sau đó trang web của bên thứ ba đặt chúng, chúng sẽ kết thúc trùng lặp. –