libcurl: content-disposition устанавливается в attachchemnt при отправке данных формы - PullRequest
0 голосов
/ 26 сентября 2018

Я использую тестовый код ниже для обновления параметра «имя» объекта по указанному веб-адресу.

Если я запускаю 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 в качестве вложения?

Должно ли это быть вложение или данные формы для загрузки формы?

Или я ошибаюсь с кодом?Пожалуйста, дайте мне знать, если у вас есть идеи по этому поводу.

...