使用HttpQueryInfo 这个函数有什么注意事项?

时间:2022-12-18 17:11:31
BOOL  bQuery=::HttpQueryInfo(hRequest,
HTTP_QUERY_CONTENT_LENGTH,
CntLenBuff,
&dwquerybuflen,NULL);
我想获取http头的Content-Length,但是在查看内存时发现,CntLenBuff里面的内容是两部分,如果Content-Length是20,那么CntLenBuff数组的内容就是“2.0."和”20“,dwquerybuflen值是4。也就是说,既有宽字节的字符串,也有单字节字符串,而我的http头里Content-Length: 20是单字节写入的,谁知道为何会同时存在宽字节字符串和单字节字符串?如果我想获得long型或int型的Content-Length具体数值,接下来该怎么做?
使用HttpQueryInfo 这个函数有什么注意事项?

5 个解决方案

#1


DWORD dwBuffer = 0;
DWORD dwSize = sizeof(dwBuffer);

if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwBuffer , &dwSize , NULL))
{
 // ...
}

这样 ??

#2


引用 1 楼 VisualEleven 的回复:
DWORD dwBuffer = 0;
DWORD dwSize = sizeof(dwBuffer);

if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwBuffer , &dwSize , NULL))
{
 // ...
}

这样 ??


好吧,虽然直接看版主的代码还是不太明白,不过我搜索HTTP_QUERY_FLAG_NUMBER
找到了http://bbs.csdn.net/topics/390112783,
dwBuffer 直接就是接收长度,不过为何这帖子里新申请的数组长度是+1呢?
char* buffer = new char[dwFileSize+1] ; +1是为了得到"\0"还是什么呢?有什么要注意的? 使用HttpQueryInfo 这个函数有什么注意事项?

#3


是的,一般是为空字符'\0'准备的。

#4


引用 3 楼 VisualEleven 的回复:
是的,一般是为空字符'\0'准备的。


可是为何我在
	
long rcvCount = dwFileSize+1;//此处设定接收总长为Content-Length+1
  BOOL GetDatasucc ;
int nLeft = rcvCount;
int idx=0;
while(nLeft>0)//rcvBuffer是一个足够大的数组
{
GetDatasucc = InternetReadFile(hRequest,&rcvBuffer[idx],nLeft,&dwReaded);
Sleep(1); 
if (!GetDatasucc)
{
dwErrorCode=GetLastError();
cout<<"2nd_Recieve_GetError_InternetReadFile: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
idx+=dwReaded;
nLeft-=dwReaded;
}
里面设定rcvCount = dwFileSize+1后就僵死了?如果rcvCount = dwFileSize不+1则能正常收完。

#5


引用 3 楼 VisualEleven 的回复:
是的,一般是为空字符'\0'准备的。

版主在否? 使用HttpQueryInfo 这个函数有什么注意事项?

#1


DWORD dwBuffer = 0;
DWORD dwSize = sizeof(dwBuffer);

if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwBuffer , &dwSize , NULL))
{
 // ...
}

这样 ??

#2


引用 1 楼 VisualEleven 的回复:
DWORD dwBuffer = 0;
DWORD dwSize = sizeof(dwBuffer);

if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwBuffer , &dwSize , NULL))
{
 // ...
}

这样 ??


好吧,虽然直接看版主的代码还是不太明白,不过我搜索HTTP_QUERY_FLAG_NUMBER
找到了http://bbs.csdn.net/topics/390112783,
dwBuffer 直接就是接收长度,不过为何这帖子里新申请的数组长度是+1呢?
char* buffer = new char[dwFileSize+1] ; +1是为了得到"\0"还是什么呢?有什么要注意的? 使用HttpQueryInfo 这个函数有什么注意事项?

#3


是的,一般是为空字符'\0'准备的。

#4


引用 3 楼 VisualEleven 的回复:
是的,一般是为空字符'\0'准备的。


可是为何我在
	
long rcvCount = dwFileSize+1;//此处设定接收总长为Content-Length+1
  BOOL GetDatasucc ;
int nLeft = rcvCount;
int idx=0;
while(nLeft>0)//rcvBuffer是一个足够大的数组
{
GetDatasucc = InternetReadFile(hRequest,&rcvBuffer[idx],nLeft,&dwReaded);
Sleep(1); 
if (!GetDatasucc)
{
dwErrorCode=GetLastError();
cout<<"2nd_Recieve_GetError_InternetReadFile: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
idx+=dwReaded;
nLeft-=dwReaded;
}
里面设定rcvCount = dwFileSize+1后就僵死了?如果rcvCount = dwFileSize不+1则能正常收完。

#5


引用 3 楼 VisualEleven 的回复:
是的,一般是为空字符'\0'准备的。

版主在否? 使用HttpQueryInfo 这个函数有什么注意事项?