我想模拟web表单提交到PHP API,但失败了,我尝试了很多方法。我的代码
#define HADES "Content-Type:application/x-www-form-urlencoded;charset=utf-8"
int SendPacket(char *packet, const char *server)
{
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = curl_easy_init();
if (!curl) {
return -1;
}
CURLcode ret;
struct curl_slist *haderlist = NULL;
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
haderlist = curl_slist_append(haderlist, HADES);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "username",
CURLFORM_COPYCONTENTS,
"11111111111", CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "password",
CURLFORM_COPYCONTENTS,
"111111", CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "client", CURLFORM_FILE,
"wap", CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, haderlist);
curl_easy_setopt(curl, CURLOPT_URL, server);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
//SendData
ret = curl_easy_perform(curl);
if (ret != CURLE_OK ) {
curl_easy_strerror(ret);
return -1;
}
return 0;
}
我将post的参数更改为这种格式,可以像这样正常发送: username = 11111 & password = 1111 & client = wap,而不是使用form_add函数,但我不知道怎么做。
如何纠正这个问题?我没有头绪
发布于 2020-03-13 09:47:08
您正在混合表单编码。CURLOPT_POSTFIELDS
需要URL编码的表单(例如username = 11111&password =1111&client=wap
),而curl_formadd
生成的是multipart/form-data
编码的表单。可以对curl_formadd
使用CURLOPT_HTTPPOST,也可以在url编码的表单上使用CURLOPT_POSTFIELDS
。
在这两种情况下,您都不需要添加Content-Type
标头,因为它会自动添加。
https://stackoverflow.com/questions/60629382
复制相似问题