J'ai un robot d'exploration pour HTTP qui passe à Wininet.Wininet SSL client authentifier l'étrangeté
Cela fonctionne généralement bien, mais pour un site Web, j'obtiens l'erreur ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
code Exemple:
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
;
J'ai ensuite essayé une expérience avec:
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
;
Cependant, deux choses sont impairs ici:
- 1) Aucune boîte de dialogue affiche
- 2) Il fonctionne
- 2.1) Pas d'erreur sur le deuxième HttpSendRequest
- 2.2) Les données valides sont retournés
Il trouve ci-dessus combinaison très étrange et contraire à la documentation. Puisque l'utilisateur n'a sélectionné aucun certificat, pourquoi cela fonctionne-t-il? Si Wininet revient au certificat d'authentification anonyme du client lorsque la boîte de dialogue ne peut pas être affichée (je suppose que je lui ai donné un handle incorrect pour afficher la boîte de dialogue? sans l'appel à InternetErrorDlg?
Merci, je vais essayer!:) Je trouve toujours bizarre que ma solution fonctionne car elle est contraire à la documentation. Je vais passer à la vôtre :) – Tom
Juste testé la solution, et ça marche! Merci :) – Tom
Je suis heureux de pouvoir vous aider. –