HttpQueryInfo ,错误 12150 没有 content length

笑客v 2017-08-11 04:49:01
extern "C" __declspec(dllexport) string GetHTML(char*URL)
{
HINTERNET Session = InternetOpenA(NULL,INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL);
if (NULL == Session)
{
InternetCloseHandle(Session);
return "";
}
DWORD d = GetLastError();
URL = "http://www.baidu.com";
HINTERNET hHttpFile = InternetOpenUrlA(Session, URL, NULL,NULL, INTERNET_FLAG_NO_CACHE_WRITE, NULL);

if (NULL == hHttpFile)
{
InternetCloseHandle(hHttpFile);
InternetCloseHandle(Session);

CHAR szError[256];
DWORD dwErrorSize = 256;
DWORD dwLastErrorMsg;
InternetGetLastResponseInfo(&dwLastErrorMsg, (LPWSTR)szError, &dwErrorSize);
string m_strTmperror = szError;

d = GetLastError();
return "";
}
d = GetLastError();
char szSizeBuffer[32];
DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
DWORD dwFileSize = 10 * 1024;
if (::HttpQueryInfo(hHttpFile, HTTP_QUERY_CONTENT_LENGTH, szSizeBuffer, &dwLengthSizeBuffer, NULL) == TRUE)
{
// allocating the memory space for http file contents
dwFileSize = atol(szSizeBuffer);
}
else
d = GetLastError();//总是到这里 12150 因为拿不到内容长度,数据总是不玩完整读取,不是多了就是少了,为什么会没有发现数据长度头?

PBYTE pBuf = new BYTE[dwFileSize * sizeof(TCHAR)];
if (NULL == pBuf)
{

InternetCloseHandle(hHttpFile);
InternetCloseHandle(Session);
return FALSE;
}
DWORD dwReadDataLength = NULL;
BOOL bRet = TRUE;
do
{
//ZeroMemory(pBuf,dwMaxDataLength*sizeof(TCHAR));
bRet = InternetReadFile(hHttpFile, pBuf, dwFileSize, &dwReadDataLength);

} while (NULL != dwReadDataLength);
return (char*)pBuf;
}
...全文
355 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧