传递多个参数HttpPostRequest

Passing Multiple params HttpPostRequest c++

本文关键字:参数 HttpPostRequest      更新时间:2023-10-16

我有这个函数在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);

是否有办法在post字段中添加多个请求,例如:

 value1=id&value2=password&value3=details

其中id, password, details为包含数据的变量

您可以使用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