WinHTTP 导致 Apache Web 服务器(本地主机)在 Windows Vista 上以 HTTP 状态 400 响应
WinHTTP causes Apache web server (localhost) to respond with http status 400 on Windows Vista
我正在尝试使用 WinHTTP 向 apache 网络服务器发送请求。我的代码从 Windows 7 运行到 Windows 11,但在 Windows Vista 上,我在发送请求后从服务器收到错误 400。我的代码如下所示:
if(!(cp->connection = fpWinHttpConnect(cp->session, cp->currentPanel.domain, cp->currentPanel.secure ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, 0)))
goto Done;
if (!(cp->request = fpWinHttpOpenRequest(cp->connection, L"POST", cp->currentPanel.gatePath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, cp->currentPanel.secure ? WINHTTP_FLAG_SECURE | WINHTTP_FLAG_REFRESH : WINHTTP_FLAG_REFRESH)))
goto Done;
if (!fpWinHttpSendRequest(cp->request, L"Content-Type: application/x-www-form-urlencoded", 48, postData, StrlA(postData), StrlA(postData), 0))
goto Done;
if (!fpWinHttpReceiveResponse(cp->request, 0))
goto Done;
if (!fpWinHttpQueryHeaders(cp->request, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &statusCode, &statusCodeSize, WINHTTP_NO_HEADER_INDEX))
goto Done;
//statusCode == 400
为什么会出现这个错误,为什么只出现在 Windows Vista 上?
编辑:在 apache 中启用调试日志记录后,我可以在 error.log 中看到以下错误:
[core:debug] [pid 29580:tid 1860] protocol.c(1116): (22)Invalid argument: [client 127.0.0.1:53267] Failed to read request header line Content-Type: application/x-www-form-urlencoded
$ echo -n 'Content-Type: application/x-www-form-urlencoded' | wc -c
47
$
lpszHeaders
(参数 dwHeadersLength
)的参数长度过长。它可能将空值发送到套接字,Apache 不高兴。
显然将长度更改为 -1
将解决问题,正如评论中所述,传递实际值也是如此。
我正在尝试使用 WinHTTP 向 apache 网络服务器发送请求。我的代码从 Windows 7 运行到 Windows 11,但在 Windows Vista 上,我在发送请求后从服务器收到错误 400。我的代码如下所示:
if(!(cp->connection = fpWinHttpConnect(cp->session, cp->currentPanel.domain, cp->currentPanel.secure ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, 0)))
goto Done;
if (!(cp->request = fpWinHttpOpenRequest(cp->connection, L"POST", cp->currentPanel.gatePath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, cp->currentPanel.secure ? WINHTTP_FLAG_SECURE | WINHTTP_FLAG_REFRESH : WINHTTP_FLAG_REFRESH)))
goto Done;
if (!fpWinHttpSendRequest(cp->request, L"Content-Type: application/x-www-form-urlencoded", 48, postData, StrlA(postData), StrlA(postData), 0))
goto Done;
if (!fpWinHttpReceiveResponse(cp->request, 0))
goto Done;
if (!fpWinHttpQueryHeaders(cp->request, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &statusCode, &statusCodeSize, WINHTTP_NO_HEADER_INDEX))
goto Done;
//statusCode == 400
为什么会出现这个错误,为什么只出现在 Windows Vista 上?
编辑:在 apache 中启用调试日志记录后,我可以在 error.log 中看到以下错误:
[core:debug] [pid 29580:tid 1860] protocol.c(1116): (22)Invalid argument: [client 127.0.0.1:53267] Failed to read request header line Content-Type: application/x-www-form-urlencoded
$ echo -n 'Content-Type: application/x-www-form-urlencoded' | wc -c
47
$
lpszHeaders
(参数 dwHeadersLength
)的参数长度过长。它可能将空值发送到套接字,Apache 不高兴。
显然将长度更改为 -1
将解决问题,正如评论中所述,传递实际值也是如此。