非常基本的问题,但我不确定还能做什么。
从处理我的 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 请求是否缺少正确发送到服务器的内容?