簡體   English   中英

如何將帶有-F選項的curl命令轉換為libcurl

[英]How to convert curl command with -F option to libcurl

通過使用curl命令,我成功將圖像文件上傳到我的博客。

curl -F 'access_token=xxx' -F 'blogName=xxx' -F 'uploadedfile=@xxx.png' https://www.tistory.com/apis/post/attach

而且...為了在我的c ++項目上使用它,我將其轉換為libcurl,如下所示。

curl = curl_easy_init();

if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.tistory.com/apis/post/attach");
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "curl/7.61.0");

    curl_mime *formpost = curl_mime_init(curl);
    curl_mimepart *part = nullptr;

    part = curl_mime_addpart(formpost);
    curl_mime_name(part, "access_token");
    curl_mime_data(part, "xxx", CURL_ZERO_TERMINATED);

    part = curl_mime_addpart(formpost);
    curl_mime_name(part, "blogName");
    curl_mime_data(part, "xxx", CURL_ZERO_TERMINATED);

    part = curl_mime_addpart(formpost);
    curl_mime_name(part, "uploadedfile");
    curl_mime_filename(part, "xxx.png");
    curl_mime_type(part, "image/png");

    curl_easy_setopt(curl, CURLOPT_MIMEPOST, formpost);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

    res = curl_easy_perform(curl);

    ...
}

此轉換后的代碼不起作用。 結果是響應代碼400。實際上我不知道libcurl的哪個功能與curl命令的-F選項相對應。 有人讓我知道了如何將頂部的curl命令轉換為libcurl,或者我需要研究什么功能。 提前致謝。

運行以下命令后(有用的生活在這里!):

curl -F 'access_token=xxx' -F 'blogName=xxx' -F 'uploadedfile=@xxx.png' https://www.tistory.com/apis/post/attach --libcurl example.cc && cat example.cc

我得到了以下代碼(對SO的可讀性進行了一些整理):

#include <curl/curl.h>

int main(int argc, char *argv[])
{
  CURLcode ret;
  CURL *hnd;
  curl_mime *mime1;
  curl_mimepart *part1;

  mime1 = NULL;

  hnd = curl_easy_init();
  curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L);
  curl_easy_setopt(hnd, CURLOPT_URL, "https://www.tistory.com/apis/post/attach");
  curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
  mime1 = curl_mime_init(hnd);
  part1 = curl_mime_addpart(mime1);
  curl_mime_data(part1, "xxx", CURL_ZERO_TERMINATED);
  curl_mime_name(part1, "access_token");
  part1 = curl_mime_addpart(mime1);
  curl_mime_data(part1, "xxx", CURL_ZERO_TERMINATED);
  curl_mime_name(part1, "blogName");
  part1 = curl_mime_addpart(mime1);
  curl_mime_filedata(part1, "xxx.png");
  curl_mime_name(part1, "uploadedfile");
  curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime1);
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.60.0");
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_2TLS);
  curl_easy_setopt(hnd, CURLOPT_SSH_KNOWNHOSTS, "/home/MY_USER/.ssh/known_hosts");
  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  ret = curl_easy_perform(hnd);

  curl_easy_cleanup(hnd);
  hnd = NULL;
  curl_mime_free(mime1);
  mime1 = NULL;

  return (int)ret;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM