使用CHttpFile发送post请求AddRequestHeaders一次只能添加一个属性
编者:李国帅
时间:2019/11/22
背景原因:
有时候,需要在vc中不使用第三方工具,对restful接口进行测试。
以前写了一个程序,使用CHttpFile发送json post请求,后来发现不能正常请求。部分代码如下:
INTERNET_PORT nPort = 80;
char* strObjectName = "/xxx/getList";
pServer = m_InetSession.GetHttpConnection(m_strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObjectName);
//设置请求相关参数
char szHeaders[1000];
strcpy(szHeaders, "POST /homeRecovery/android/video/getVideoList HTTP/1.1\n");
strcat(szHeaders, "Accept:application/json,application/xml,application/xhtml+xml,text/html,text/xml,text/plain\n");
strcat(szHeaders, "Content-Type:application/json; charset=UTF-8\n");
strcat(szHeaders, "Connection:close\n");
pFile->AddRequestHeaders(szHeaders);
const char* data = jsonRequest.GetString();
pFile->SendRequestEx(strlen(data));
pFile->WriteString(data);//
pFile->EndRequest();
DWORD dwRet;
pFile->QueryInfoStatusCode(dwRet);
抓包发现设置的参数没有了。
解决方法:
后来发现,是因为添加属性的方法错了,AddRequestHeaders一次只能添加一个属性。调整添加属性的方法如下:
//设置请求相关参数
pFile->AddRequestHeaders("POST /homeRecovery/android/video/getVideoList HTTP/1.1");
//accept请求报头域,表示客户端接受哪些类型的信息
pFile->AddRequestHeaders("Accept:application/json, application/xml, application/xhtml+xml, text/html, text/xml, text/plain");
pFile->AddRequestHeaders("Content-Type:application/json; charset=UTF-8");
pFile->AddRequestHeaders("Accept-Language: zh-cn;q=0.8,en;q=0.6,ja;q=0.4");
pFile->AddRequestHeaders("Connection:close");//content为实体报头域,格式及编码
这样就正常了。
总结:
客户端的程序依赖于服务器的程序,即便是当时是正确的,如果服务器代码改了,不再兼容客户端的错误代码,客户端就可能不正常。
所以也不能说原来可以运行而现在不能运行就能说明原来的代码是正确的。