내가 이전에 본 몇 가지 질문에 따라 Inno Setup에서 WinHttpRequest
을 사용하여 웹 서버에 GET
요청을합니다 (localhost:8000
). 아래의 최소 코드는 내장 Django 디버그 서버 (python manage.py runserver
)에 대한 요청입니다.Inno 설치의 WinHttpRequest가 Authenticate 헤더와 함께 자격 증명을 보내지 않습니다.
procedure InitializeWizard();
var
WinHttpReq: Variant;
url: string;
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER: integer;
begin
url := 'http://localhost:8000/odbc/test/';
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER := 0;
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('GET', url, false);
WinHttpReq.SetRequestHeader('Accept','application/json');
WinHttpReq.SetCredentials('username','password',HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
WinHttpReq.Send();
MsgBox(WinHttpReq.Status, mbInformation, MB_OK);
MsgBox(WinHttpReq.ResponseText, mbInformation, MB_OK);
end;
이렇게하면 403 인증 자격 증명이 제공되지 않습니다.
반대로, Python 요청 라이브러리의이 코드는 성공적으로 작동합니다.
>> import requests
>> r = requests.get('http://localhost:8000/odbc/test/', auth=('username','password'))
>> r.status_code
200
오전 나는 어떻게 WinHttpRequest
객체의 작품을 오해? Wireshark가 Authorization: Basic *hashstring*
헤더를 확인했기 때문에 헤더에 Python 요청이 있지만 WinHttpRequest
사례에는 전송되지 않았습니다. 가능성이있는 해결 방법은 WinHttpRequest
개체의 헤더를 직접 설정하는 것이지만 잘못된 것이 있다면 궁금합니다. 패킷 캡처와
요점 : https://gist.github.com/anonymous/597468ba76b59dae4a8d7809ee1c6feb
와이어 샤크의 스크린 샷 :
작품 - 1) 사용자 이름/암호에 특수 문자가 있습니까 :
Authenticate
헤더를 보내기? 2) 예를 들어 HTTP 트래픽을 캡처 할 수 있습니까? Wireshark, Inno Setup 코드와 Python 코드 둘 다? 여기에 게시 하시겠습니까? 적어도 둘 다에 대한 웹 서버 로그. –wireshark 캡처 스크린 샷을 추가했습니다. wireshark 캡처를 게시하기위한 더 좋은 형식이 있습니까? –
캡처를 중지하면 트래픽을 파일에 저장할 수 있습니다. 'WinHttpRequest'는 두 개의 HTTP 요청을 보냅니다. 처음에는 인증을받지 않고 401을 수신 한 후 승인을받은 두 번째 요청을 보냅니다. 따라서 우리는 서버의 응답을 포함하여 두 가지 요청을 모두 볼 필요가 있습니다. –