libcurlアップロードファイルpost fromフォーム、postバイナリの違い
http://blog.csdn.net/leekumbong/article/details/29182299
libcurlはパラメータが多くて、ちょっと油断すると問題になりやすいです.卵が痛いという問題に遭遇したことがあります.libcurl断点ダウンロード.
ここでは主に、libcurlアップロードの2つの方法をまとめます.
1、ファイルを直接アップロードして、フォームと似ています.
2.バイナリストリームをアップロードする;
カスタムヘッドを設定するには、同じ方法を使います.
直接ファイルをアップロード:
バイナリストリームアップロード:
CURL FORMCOPYNAMEはアップロードされたフィールド名で、上の図のように(nameの後)
CURL FORMBUFER CURL FORMは使用していません.FILEはユーザー定義のファイルをアップロードする時に使用して、libcurlファイルの内容はすでにキャッシュにありました.コンテンツのヘッダ情報にfilenameフィールドが提供されています.このパラメータを入れていませんが、アップロードが失敗しています.
もう一つ注意したいところがあります.CURL FORMです.BUFFERLENGTHそのタイプはlongでなければなりません.
テストを便利にするために、node.jsのformidableを使ってデバッグしました.
参照リンク:
http://curl.haxx.se/libcurl/c/curl_formadd.
http://curl.haxx.se/libcurl/c/libcurl-tutorial.html
http://curl.haxx.se/libcurl/c/postit2.html
http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type
http://zengrong.net/post/2088.htm
http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working
HTTPプロトコルでファイルをアップロードする
libcurl POSTデータとアップロードファイルを使う
libcurlはパラメータが多くて、ちょっと油断すると問題になりやすいです.卵が痛いという問題に遭遇したことがあります.libcurl断点ダウンロード.
ここでは主に、libcurlアップロードの2つの方法をまとめます.
1、ファイルを直接アップロードして、フォームと似ています.
2.バイナリストリームをアップロードする;
カスタムヘッドを設定するには、同じ方法を使います.
struct curl_slist *headers=NULL;
headers = curl_slist_append(headers, "Content-Type: text/xml");
headers = curl_slist_append(headers, "Accept: text/html, */*;q=0.01");
//...
//set headers
curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
//last free the header list
curl_slist_free_all(headers); /* free the header list */
公式サイトに行ってCURLOPT_を確認します.HTTPHEADER>>直接ファイルをアップロード:
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "uploadfile",
CURLFORM_FILE, "/",//imagepath
CURLFORM_CONTENTTYPE, "Image/jpeg",
CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "test.jpg",
CURLFORM_END);
curl_easy_setopt(m_curl,CURLOPT_HTTPPOST,formpost);
//last free post
curl_formfree(formpost);
他のファイルタイプをアップロードすると、curl_にあります.formaddにCURL FORMを付加します.CONTENTTYPEパラメータ(Content-Type/Mime-Type)バイナリストリームアップロード:
//referer http://curl.haxx.se/mail/lib-2003-08/0190.html
curl_formadd(&post, &last,
CURLFORM_COPYNAME, "file",
CURLFORM_BUFFER, "unnamed.png",
CURLFORM_BUFFERPTR, memblock,
CURLFORM_BUFFERLENGTH, memblock_length,
CURLFORM_CONTENTTYPE, "image/png",
CURLFORM_END);
‘file' is the name of this part, 'unnamed.png' is the name set in the file name field.
上のパラメータはすべてデフォルトではいけません.デフォルトの結果は予想に合わないかもしれません.その中でConteet Typeはデフォルトで「aplication/octet stream」です.CURL FORMCOPYNAMEはアップロードされたフィールド名で、上の図のように(nameの後)
CURL FORMBUFER CURL FORMは使用していません.FILEはユーザー定義のファイルをアップロードする時に使用して、libcurlファイルの内容はすでにキャッシュにありました.コンテンツのヘッダ情報にfilenameフィールドが提供されています.このパラメータを入れていませんが、アップロードが失敗しています.
もう一つ注意したいところがあります.CURL FORMです.BUFFERLENGTHそのタイプはlongでなければなりません.
テストを便利にするために、node.jsのformidableを使ってデバッグしました.
参照リンク:
http://curl.haxx.se/libcurl/c/curl_formadd.
http://curl.haxx.se/libcurl/c/libcurl-tutorial.html
http://curl.haxx.se/libcurl/c/postit2.html
http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type
http://zengrong.net/post/2088.htm
http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working
HTTPプロトコルでファイルをアップロードする
libcurl POSTデータとアップロードファイルを使う