예제 #1
0
파일: WinHttp.cpp 프로젝트: gaodeng/jucpp
	int HttpRequest::Request(const void* data,int len,Memory<char>& html,String* retHead){
		if(!hRequest) return -1;
		if(!::HttpSendRequest(hRequest,NULL,0,(LPVOID)data,len)) return -1;

		DWORD dwSize = 0;
		if(retHead){
			HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF, NULL, &dwSize, NULL);
			if(dwSize!=0){
				retHead->SetCubage(dwSize/2);
				if(HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, (LPVOID)retHead->Handle(), &dwSize, NULL)){
					//安全起见,实际上数据已经是一个NULL结尾的字串。
					(*retHead)[dwSize/2-1] = 0;
					retHead->Realize();
				}
			}
		}

		int offset = 0;
		for(;;){
			char szData[1024];
			DWORD dwByteRead = 0;
			::InternetReadFile(hRequest,szData,sizeof(szData),&dwByteRead);
			if(!dwByteRead) break;
			if(html.Length()<dwByteRead+offset+1){
				if(!html.SetLength(dwByteRead+offset+1)){
					Print(L"html alloc failed");
					break;
				}
			}
			html.CopyFrom(szData,dwByteRead,offset);
			offset += dwByteRead;
		}
		if(offset!=0) html[offset] = 0;
		::InternetCloseHandle(hConnect);
		hConnect = 0;
		::InternetCloseHandle(hRequest);
		hRequest = 0;
		return offset;
	}