我有一個爬蟲,HTTPs切換到Wininet。Wininet SSL客戶端驗證奇怪
這通常效果很好,但對於一個網站,我得到錯誤 ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
示例代碼:
vErrorNone := HttpSendRequest(HttpOpen_Request, nil, 0, nil, 0);
if vErrorNone = False then
begin
vErrorID := GetLastError;
if (vErrorID = ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED) then
begin
// this error
end
;
end
;
然後我試着用一個實驗:
TmpFakePointer := nil;
vErrorNone :=
InternetErrorDlg(
GetDesktopWindow()
,
HttpOpen_Request
,
ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
,
0
or FLAGS_ERROR_UI_FILTER_FOR_ERRORS
or FLAGS_ERROR_UI_FLAGS_GENERATE_DATA
or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS
,
TmpFakePointer
)
= ERROR_SUCCESS
;
if vErrorNone then
begin
vErrorNone := HttpSendRequest(HttpOpen_Request, nil, 0, nil, 0);
end
;
然而,有兩件事在這裏很奇怪:
- 1)無對話框顯示
- 2)它的工作原理
- 2.1)在第二HttpSendRequest中
- 2.2)有效的數據沒有錯誤返回
它發現上述組合很奇怪,違反文檔。由於用戶沒有選擇任何證書,爲什麼這個工作?如果Wininet在無法顯示對話框時回退到匿名客戶端身份驗證證書(我假設我給了它不正確的句柄來顯示對話框?雖然它錯誤,如果我明確地給它一個錯誤的句柄)是否有任何方法直接選擇沒有調用InternetErrorDlg?
謝謝,我會試試看!:)我仍然發現我的解決方案很奇怪,因爲它與文檔相反。我會切換到你的:) – Tom 2012-04-05 11:49:15
剛剛測試過的解決方案,它的工作原理!謝謝:) – Tom 2012-04-05 12:21:22
我很高興我可以幫助你。 – 2012-04-05 12:28:29