首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WINHTTP_QUERY_URI在WinHTTP的用途?

WINHTTP_QUERY_URI在WinHTTP的用途?
EN

Stack Overflow用户
提问于 2013-04-16 19:28:57
回答 1查看 1.5K关注 0票数 2

使用带有WINHTTP_QUERY_URI函数的WinHttpQueryHeaders标志确切地可以查询哪些HTTP标头?在阅读了它的描述之后,我觉得这个标志应该用来获取WinHttpOpenRequest函数中指定的请求的URI。然而,下面的程序给出了一个错误代码12019 ERROR_INTERNET_INCORRECT_HANDLE_STATE (如果我取消注释两行,则为12150 ERROR_HTTP_HEADER_NOT_FOUND )。

代码语言:javascript
复制
#include <cstdio>
#include <windows.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")
int main()
{
    HINTERNET hSession = WinHttpOpen(nullptr, WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
    HINTERNET hConnect = WinHttpConnect(hSession, L"www.ietf.org", INTERNET_DEFAULT_HTTP_PORT, 0);
    HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"GET", L"/rfc/rfc2616.txt", nullptr, WINHTTP_NO_REFERER, nullptr, 0);

    //WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
    //WinHttpReceiveResponse(hRequest, 0);

    wchar_t url[1024] = {};
    DWORD url_size = sizeof(url);
    auto success = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_URI, WINHTTP_HEADER_NAME_BY_INDEX, url, &url_size, WINHTTP_NO_HEADER_INDEX);
    auto error_code = GetLastError();
    wprintf(L"success=%d error_code=%u url=%s", success, error_code, url);

    WinHttpCloseHandle(hRequest);
    WinHttpCloseHandle(hConnect);
    WinHttpCloseHandle(hSession);
}

是的,我知道我可以使用WinHttpQueryOptionWINHTTP_OPTION_URL获得请求URI,无需指出这一点。

编辑。按照下面的队长Obvlious回答添加WINHTTP_QUERY_FLAG_REQUEST_HEADERS标志(如果WINHTTP_QUERY_URI确实应该返回请求URI,这完全是有意义的):现在不管有没有WinHttpSendRequestWinHttpReceiveResponse调用,WinHttpQueryHeaders函数都会产生错误代码12150 ERROR_HTTP_HEADER_NOT_FOUND

EN

回答 1

Stack Overflow用户

发布于 2013-04-16 19:53:05

您正在查询不包含URI的请求的响应头。您需要包含要从请求头检索的WINHTTP_QUERY_FLAG_REQUEST_HEADERS修饰符标志。

代码语言:javascript
复制
WinHttpQueryHeaders(
    hRequest,
    WINHTTP_QUERY_URI | WINHTTP_QUERY_FLAG_REQUEST_HEADERS,
    WINHTTP_HEADER_NAME_BY_INDEX,
    url,
    &url_size,
    WINHTTP_NO_HEADER_INDEX);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16045485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档