在vc++使用IWinHttpRequest-Post请求数据时,ResponseText属性时常会中断。
以下是代码:
string FetchPost2(const char *hUrl, const char *rParam, const char *body, const char *refer)
{
string tmp = "";
string temp = "";
string line = "";
string hName = "";
string hVal = "";
int index = 0;
bool flag = false;
//以单线程创建初始化com对象
CoInitialize(NULL);
IWinHttpRequest *win = NULL;
//根据给定的程序标识符从注册表找出对应的类识别符
CLSID clsid = { 0 };
HRESULT hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);
if (FAILED(hr))
return tmp;
//用指定的类标识符创建一个com对象
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, __uuidof(IWinHttpRequest), (LPVOID *)&win);
if (FAILED(hr))
return tmp;
//拼接链接
char rLink[MAX_SIZE]{0};
strcpy(rLink, hUrl);
strcat(rLink, rParam);
//打开http连接
hr = win->Open("POST", rLink);
if (FAILED(hr))
return tmp;
//添加请求头
temp = refer;
while (!flag){
index = temp.find("\r\n");
if (index<0 || index>temp.length())
flag = true;
line = temp.substr(0, index);
temp = temp.substr(index + 2);
index = line.find(":");
hName = line.substr(0, index);
hVal = line.substr(index + 1);
hr = win->SetRequestHeader(hName.c_str(), hVal.c_str());
if (FAILED(hr))
break;
}
//发送请求
hr = win->Send(body);
if (FAILED(hr))
return tmp;
//接收返回数据并进行相应转码
_bstr_t Rtn =win->ResponseText;
const char *buf = Rtn;
string strRtn = buf;
ConvertANSIToUTF8(strRtn, buf);
win->Release();
//关闭当前线程的com
CoUninitialize();
return strRtn;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。