2012-03-03 24 views
5

Trong trình khám phá internet tôi có thể đặt máy chủ proxy. Sau đó, khi truy cập Internet, IE sẽ nhắc tôi cung cấp thông tin xác thực proxy và tùy chọn lưu chúng. Các phiên bản mới của IE sẽ nhận thông tin đăng nhập.Cách yêu cầu WinINet sử dụng thông tin máy chủ proxy của IE

Tôi cũng có thể xem thông tin xác thực được lưu trong Trình quản lý thông tin xác thực, dưới dạng Thông tin xác thực chung. Tên này tuân theo quy ước đặt tên như Microsoft_WinInet_ [proxyserver: port]/[proxyserver.acme.com].

Ứng dụng của tôi sử dụng WinINet. Chúng tôi hiện đang đặt thông tin đăng nhập qua InternetSetOption với INTERNET_OPTION_PROXY_USERNAME và INTERNET_OPTION_PROXY_PASSWORD.

Nhưng thay vào đó, tôi muốn thông báo cho WinINet sử dụng thông tin đăng nhập của IE (hoặc Trình quản lý thông tin xác thực) cho người dùng hiện tại.

Trả lời

2

Cách để có WinInet sử dụng thông tin thông tin quản lý là để sử dụng chức năng InternetErrorDlg, như vậy:

retry: 
    BOOL fRet = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0); 
    DWORD dwError = ::GetLastError(); 
    DWORD statusCode(0); 
    DWORD statusLen = sizeof(DWORD); 
    DWORD headerIndex = 0; 
    ::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, 
        &statusCode, &statusLen, &headerIndex); 

    if (statusCode == HTTP_STATUS_PROXY_AUTH_REQ) 
    { 
    DWORD dwFlags = FLAGS_ERROR_UI_FILTER_FOR_ERRORS | 
        FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | 
        FLAGS_ERROR_UI_FLAGS_GENERATE_DATA; 
    DWORD res =::InternetErrorDlg(GetDesktopWindow(), hRequest, 
            ERROR_INTERNET_INCORRECT_PASSWORD, dwFlags, NULL); 
    if (res == ERROR_INTERNET_FORCE_RETRY) 
     goto retry; 
    else 
     return false; 
    } 

InternetErrorDlg sẽ trở lại ERROR_INTERNET_FORCE_RETRY nếu nó đã thành công trong việc có được thông tin (từ CM hoặc bằng cách nhắc nhở người sử dụng) .

Cờ FLAGS_ERROR_UI_FLAGS_NO_UI (không được sử dụng ở trên) có thể được sử dụng để tránh hiển thị hộp thoại nhắc người dùng xác thực.

Julio

1

Khởi tạo việc sử dụng các chức năng Wininet với các thông số Proxy xác định trước từ IE như thế này

HINTERNET hOpen = NULL; 

hOpen = InternetOpen(L"XXX", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 

...

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