WinHttp를 사용하여 보안 사이트에 POST를 시도하고 사용자 에이전트 헤더가 CONNECT와 함께 전송되지 않는 문제가 발생합니다.CONNECT 및 POST를 통해 WinHTTP를 통해 사용자 에이전트를 보내시겠습니까?
나는 MSDN에서 가볍게 수정 된 코드 샘플을 사용하고 있습니다 :
HINTERNET hHttpSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
WINHTTP_AUTOPROXY_OPTIONS AutoProxyOptions;
WINHTTP_PROXY_INFO ProxyInfo;
DWORD cbProxyInfoSize = sizeof(ProxyInfo);
ZeroMemory(&AutoProxyOptions, sizeof(AutoProxyOptions));
ZeroMemory(&ProxyInfo, sizeof(ProxyInfo));
hHttpSession = WinHttpOpen(L"WinHTTP AutoProxy Sample/1.0",
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
0);
if(!hHttpSession)
goto Exit;
hConnect = WinHttpConnect(hHttpSession,
L"server.com",
INTERNET_DEFAULT_HTTPS_PORT,
0);
if(!hConnect)
goto Exit;
hRequest = WinHttpOpenRequest(hConnect, L"POST", L"/resource", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE);
if(!hRequest)
goto Exit;
WINHTTP_PROXY_INFO proxyInfo;
proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
proxyInfo.lpszProxy = L"192.168.1.2:3199";
proxyInfo.lpszProxyBypass = L"";
WinHttpSetOption(hHttpSession,
WINHTTP_OPTION_PROXY,
&proxyInfo,
sizeof(proxyInfo));
WinHttpSetCredentials(hRequest, WINHTTP_AUTH_TARGET_PROXY, WINHTTP_AUTH_SCHEME_BASIC, L"proxyuser", L"proxypass", NULL);
if(!WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, "content", 7, 7, 0))
{
goto Exit;
}
if(!WinHttpReceiveResponse(hRequest, NULL))
goto Exit;
/* handle result */
Exit:
if(ProxyInfo.lpszProxy != NULL)
GlobalFree(ProxyInfo.lpszProxy);
if(ProxyInfo.lpszProxyBypass != NULL)
GlobalFree(ProxyInfo.lpszProxyBypass);
if(hRequest != NULL)
WinHttpCloseHandle(hRequest);
if(hConnect != NULL)
WinHttpCloseHandle(hConnect);
if(hHttpSession != NULL)
WinHttpCloseHandle(hHttpSession);
무엇이하는 일은 192.168.1.2:3199에서 인증 된 프록시를 통해 내 서버에 연결하고, POST를 만드는 것입니다. 이 작동하지만 프록시 로그를 검사 할 때 사용자 에이전트 문자열 ("WinHTTP AutoProxy Sample/1.0")이 CONNECT의 일부로 보내지지 않습니다. 그러나 POST의 일부로 전송됩니다.
누구든지 중에 사용자 에이전트 헤더를 보내려면이 코드를 어떻게 변경할 수 있습니까? CONNECT와 POST?
편집은 추가 : 우리가이 문제를 관찰 만 윈도우 7에 우리는 Windows Vista의 상자에서 동일한 코드를 실행하면, 우리는 사용자 에이전트 헤더가 CONNECT에 전송되는 것을 볼 수 있습니다.
대단히 감사드립니다. 나는 잠시 미쳤다고 생각했다. :-) –
에릭, 나는이 질문을 게시 한 이후 HTTPS 대신 HTTP를 사용하도록 소프트웨어를 재 설계해야했다. 기업 네트워크에서 프록시를 필터링함으로써 거부되기 때문에 User-Agent의 기반. 그들과 접촉하고 있다면, WinHTTP 팀에게 이것이 우리에게 힘든 일임을 알리시기 바랍니다. 더 빨리 이러한 회귀 (미안하지만, 행동 변화)가 모든 Windows 개발자들에게 더 나은 것으로 결정됩니다. . –
Duncan : Microsoft 고객 지원 (http://support.microsoft.com)에 연락하여이 문제를 해결해야합니다. 그것이 Microsoft에서 제공하는 수정본을 얻는 길입니다. 이것이 우리 행동의 변화이기 때문에, 지원비는 면제됩니다. – EricLaw