WinInet HttpQuery信息返回无效状态码
WinInet HttpQuery Info returning Invalid Status Codes
我正在编写一个程序,该程序需要在加载页面之前检查页面是否存在(所以没有什么太奇怪的)。
一切工作正常,但我不能得到HttpQueryInfo返回一个页面的有效状态码。返回的状态码为:1875378224
产生问题的代码:DWORD headerBuffSize = sizeof(DWORD);
DWORD statusCode;
//Check existance of page (for 404 error)
if(!HttpQueryInfo(hRequestHandle,
HTTP_QUERY_STATUS_CODE,
&statusCode,
&headerBuffSize,
NULL))
return 4;
if(statusCode == HTTP_STATUS_NOT_FOUND)
cout << "We got a 404 error" << endl;
cout << "Got Status code: " << statusCode << endl; //1875378224 everywhere
cout << "404 status code: " << HTTP_STATUS_NOT_FOUND << endl; //What it should be getting
我不知道该怎么做;我将自己的代码与网上的几个示例进行了比较,看起来应该可以工作,尽管我可能刚刚犯了一个愚蠢的错误。
谢谢!
正如其他人指出的那样,HttpQueryInfo将请求的信息作为字符串返回。您需要确保您有一个足够大的缓冲区来检索字符串,并且,它将由您的应用程序释放它。
然而,HttpQueryInfo的相同微软文档也提示,如果使用HTTP_QUERY_FLAG_NUMBER
,则可以为HTTP_QUERY_STATUS_CODE
获得DWORD
。
DWORD statusCode = 0;
DWORD length = sizeof(DWORD);
HttpQueryInfo(
hRequestHandle,
HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&statusCode,
&length,
NULL
);
HttpQueryInfo
从响应头中检索的信息始终是一个文本字符串。
int statusCode;
char responseText[256]; // change to wchar_t for unicode
DWORD responseTextSize = sizeof(responseText);
//Check existance of page (for 404 error)
if(!HttpQueryInfo(hRequestHandle,
HTTP_QUERY_STATUS_CODE,
&responseText,
&responseTextSize,
NULL))
return 4;
statusCode = atoi(responseText);
我最近才得到这个工作-发现网络上的大多数例子都不适合我,甚至是MSDN上的(可能是因为我的c++现在很生锈,我正在犯简单的错误)。这就是我的工作:
LPVOID lpOutBuffer = NULL;
DWORD dwSize = 0;
while (!HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE, (LPVOID)lpOutBuffer, &dwSize, NULL))
{
DWORD dwError = GetLastError();
if (dwError == ERROR_INSUFFICIENT_BUFFER)
{
lpOutBuffer = new wchar_t[dwSize];
}
else
{
fprintf(stderr, "HttpQueryInfo failed, error = %d (0x%x)n",
GetLastError(), GetLastError());
break;
}
}
wchar_t* outBuffer = (wchar_t*)lpOutBuffer;
std::wcout << L"Status_Code: " << outBuffer;
int status_code = _wtoi(outBuffer);
delete[] lpOutBuffer;
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- std::future_error:无关联状态
- 如何判断我的结构tm是否处于无效状态
- SQLSTATE 24000 - 无效的游标状态 ODBC VS c++
- OpenGL 无效的纹理或状态
- C++ 状态模式实现:指向状态机的指针机制变得无效
- SQL Server Express-备份后的游标状态无效
- WinInet HttpQuery信息返回无效状态码
- std::vector::swap()和有状态分配器是否应使所有迭代器无效