Я использую тестовый код ниже для обновления параметра «имя» объекта по указанному веб-адресу.
Если я запускаю curl из командной строки, он обновляет объект:
curl -d "name=rock code" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://petstore.swagger.io:80/v2/pet/7867
, но если я использую код ниже c, я получаю 200 OK с сервера, но данные не обновляются.Пакет на проводе выглядит как вывод, приведенный ниже кода.
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
struct curl_slist *headers = NULL;
struct curl_slist *recipients = NULL;
struct curl_slist *slist = NULL;
curl_mime *mime;
curl_mime *alt;
curl_mimepart *part;
const char **cpp;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://petstore.swagger.io:80/v2/pet/7867");
curl_mime *mime = NULL;
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers,"Content-Type: application/x-www-form-urlencoded");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST,"POST");
mime = curl_mime_init(curl);
curl_mimepart *part = curl_mime_addpart(mime);
curl_mime_name(part, "name");
curl_mime_data(part, "Rock code", CURL_ZERO_TERMINATED);
curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); // to get curl debug msg
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_mime_free(mime);
}
return (int)res;
}
Пакет на проводе:
Hypertext Transfer Protocol
POST /v2/pet/7867 HTTP/1.1\r\n
[Expert Info (Chat/Sequence): POST /v2/pet/7867 HTTP/1.1\r\n]
Request Method: POST
Request URI: /v2/pet/7867
Request Version: HTTP/1.1
Host: petstore.swagger.io\r\n
Accept: */*\r\n
Content-Length: 151\r\n
[Content length: 151]
Content-Type: application/x-www-form-urlencoded; boundary=------------------------4ad7539e8d91d033\r\n
\r\n
[Full request URI: http://petstore.swagger.io/v2/pet/7867]
[HTTP request 1/1]
[Response in frame: 43506]
File Data: 151 bytes
HTML Form URL Encoded: application/x-www-form-urlencoded
Form item: "--------------------------4ad7539e8d91d033
Content-Disposition: attachment; name" = ""name"
Rockey code
--------------------------4ad7539e8d91d033--
"
Key: --------------------------4ad7539e8d91d033\r\nContent-Disposition: attachment; name
Value: "name"\r\n\r\nRockey code\r\n--------------------------4ad7539e8d91d033--\r\n
Я не понимаю, почему он принимает Content-Disposition в качестве вложения?
Должно ли это быть вложение или данные формы для загрузки формы?
Или я ошибаюсь с кодом?Пожалуйста, дайте мне знать, если у вас есть идеи по этому поводу.