0

非常基本的问题,但我不确定还能做什么。

从处理我的 curl 请求并执行它的代码中:

ResponseData Request::exec()
{

    CURLcode res = CURL_LAST;
    CURL *h = curl_easy_init();
    ResponseData response;

    if(h) {
        curl_easy_setopt(h, CURLOPT_URL, getURL().c_str());
        curl_easy_setopt(h, CURLOPT_WRITEFUNCTION, handle_data);

        switch(this->_type) {
        default:
        case TYPE_GET:
            printf("sending get");
            break;
        case TYPE_POST:
            printf("sending post");
            curl_easy_setopt(h, CURLOPT_POST, 1);
            break;
        case TYPE_PUT:
            printf("sending put");
            curl_easy_setopt(h, CURLOPT_PUT, 1);
            break;
        case TYPE_DELETE:
            curl_easy_setopt(h, CURLOPT_CUSTOMREQUEST, "DELETE");
            break;
        }

        //printf("%d", postData.size());
        if(postData.size() > 0) {
            string post;
            int it = 0;
            for each (postDataItem var in postData)
            {
                it++;
                //printf("\n[]Key: %s, Value: %s", var.key, var.value);
                post.append(var.key);
                post.append("=");
                post.append(var.value);

                if(it != postData.size()) {
                    // dont append & if last element
                    post.append("&");
                }
            }



            const char * postString = post.c_str();
            const char * postUrl = curl_easy_escape(h, postString, 0);

            printf("\npayload: %s\n\n", postUrl);

            curl_easy_setopt(h, CURLOPT_POSTFIELDS, postUrl);
        }

        res = curl_easy_perform(h);

        switch(res)
        {
        case CURLE_WRITE_ERROR:
            break;
        case CURLE_OK:
            response.setData(contents.c_str());
            break;
        }

        curl_easy_cleanup(h);

        return response;

    } else {
        printf("Could not initialize curl");
    }
}

我现在作为 POSTFIELDS 发送的数据是:

username%3DDuke%26password%3DNukem

当我使用 WireShark 来查看发生了什么

Message: POST /api/account/login HTTP/1.1
Request Method: POST
Request URI: /api/account/login
Request Version: HTTP/1.1
Host: [url redacted, not important]
Line-based text data: application/x-www-form-urlencoded
    username%3DDuke%26password%3DNukem

据我所知,我正在发送一个普通的 POST,例如 HTML 表单,对吧?

在该 url 的服务器端,是一个基本的无逻辑 php 脚本,如下所示:

<?
print("GET");
var_dump($_GET);
print("POST");
var_dump($_POST);
print("REQUEST");
var_dump($_REQUEST);

我在控制台中看到的输出是什么?

GETarray(0) {
}
POSTarray(0) {
}
REQUESTarray(0) {
}

Soo...我不确定我做错了什么...我的 C++ curl 请求是否缺少正确发送到服务器的内容?

4

1 回答 1

0

是一个简单的范围问题!

解决此问题的两种方法:

代替:

if(postData.size() > 0) {
    string post;
    int it = 0;

我需要:

    if(postData.size() > 0) {
        static string post;
        int it = 0;

string post;在下面声明ResponseData response;

于 2013-07-15T23:00:52.823 回答