我有这个函数在C ++中发送HTTP POST请求,但是我有一个小问题,它传递多个字符串参数。到目前为止,这是我的代码:
#include <Windows.h>
int doHttpPost(char *szDomain, char *szPage, char *szPost)
{
int iReturn = 1;
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
static TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded";
const char *accept[2]={"*/*", NULL};
TCHAR *frmdata = szPost;
hSession = InternetOpen("AGENT", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hSession)
{
hConnect = InternetConnect(hSession, szDomain, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if(hConnect)
{
hRequest = HttpOpenRequest(hConnect, "POST", szPage, NULL, NULL, accept, INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_RELOAD, 0);
if(hRequest)
{
if(HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)))
iReturn = 0;
else
iReturn = 5;
}
else //HttpOpenRequest
iReturn = 3;
}
else //InternetConnect
iReturn = 2;
}
else //InternetOpen
iReturn = 1;
//Cleanup
InternetCloseHandle(hSession);
InternetCloseHandle(hConnect);
InternetCloseHandle(hRequest);
return iReturn;
}
我用这种方式调用函数:
doHttpPost((char*)"127.0.0.1",(char*)"/test/post.php",(char*)postreq);
我是否可以在帖子字段中添加多个请求,例如:
value1=id&value2=password&value3=details
其中id
,password
和details
将是包含数据的变量。
答案 0 :(得分:1)
您可以使用sprintf
和朋友从部件构建字符串。
最简单的代码片段,但忽略了您需要对值进行的转义,如下所示:
CHAR pszRequest[1024] = { 0 };
CHAR* pszValue1 = "id";
CHAR* pszValue2 = "password";
CHAR* pszValue3 = "details";
sprintf(pszRequest, "value1=%s&value2=%s&value3=%s",
pszValue1, pszValue2, pszValue3);
doHttpPost((char*) "127.0.0.1", (char*) "/test/post.php", pszRequest);
对于强大的解决方案,您需要阅读基本的字符串操作函数,并检查定义“application / x-www-form-urlencoded”MIME类型的主体格式的RFC。