传递多个参数HttpPostRequest c ++

时间:2014-03-09 13:48:27

标签: c++ http

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

其中idpassworddetails将是包含数据的变量。

1 个答案:

答案 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。