1. 程式人生 > >關於C++使用libcurl提交表單方式上傳檔案時提交表單引數[同HTML表單]

關於C++使用libcurl提交表單方式上傳檔案時提交表單引數[同HTML表單]

       C++與Java後臺互動,避免不了使用HTTP協議,這時候對於C++來說libcurl就派上用場了,簡單的引數傳遞比較簡單,涉及到檔案上傳和下載的時候就稍微複雜點了,具體示例如下:

int http_post_file(const char *url, const char *user, const char *pwd, const char *filename)
{
    assert(url != NULL);
    assert(user != NULL);
    assert(pwd != NULL);
    assert(filename != NULL);

    int ret = -1;


    CURL *curl = NULL;
    CURLcode code;
    CURLFORMcode formCode;
    int timeout = 15;

#define CHECK_FORM_ERROR(x)                                                /
    if ((formCode = (x)) != CURL_FORMADD_OK)                            /
    {                                                                    /

        fprintf(stderr, "curl_formadd[%d] error./n", formCode);            /
        goto out;                                                        /
    }

#define CHECK_SETOPT_ERROR(x)                                            /
    if ((code = (x)) != CURLE_OK)                                        /
    {                                                                    /

        fprintf(stderr, "curl_easy_setopt[%d] error./n", code);            /
        goto all;                                                        /
    }

    struct curl_httppost *post=NULL;
    struct curl_httppost *last=NULL;
    struct curl_slist *headerlist=NULL;

    CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "user",
        CURLFORM_COPYCONTENTS, user,
        CURLFORM_END));

    CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "password",
        CURLFORM_COPYCONTENTS, pwd,
        CURLFORM_END));

    CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "file",
        CURLFORM_FILE, filename,
        CURLFORM_END));

    CHECK_FORM_ERROR( curl_formadd(&post, &last,
        CURLFORM_COPYNAME, "submit",
        CURLFORM_COPYCONTENTS, "upload",
        CURLFORM_END));

    curl = curl_easy_init();
    if(curl == NULL)
    {
        fprintf(stderr, "curl_easy_init() error./n");
        goto out;
    }

    CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_HEADER, 0));
    CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_URL, url));
    CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_HTTPPOST, post));
    CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout));

    code = curl_easy_perform(curl);
    if(code != CURLE_OK)
    {
        fprintf(stderr, "curl_easy_perform[%d] error./n", code);
        goto all;
    }

    ret = 0;

all:
    curl_easy_cleanup(curl);
out:
    curl_formfree(post);

    return ret;
}

相關推薦

關於C++使用libcurl提交方式檔案提交引數[HTML]

       C++與Java後臺互動,避免不了使用HTTP協議,這時候對於C++來說libcurl就派上用場了,簡單的引數傳遞比較簡單,涉及到檔案上傳和下載的時候就稍微複雜點了,具體示例如下: int http_post_file(const char *url, c

JS 將form檔案 一起提交

前提 需要引入jquery(不然無法使用$.ajax) //js function add(){ var formData = new FormData(document.querySelector("form"));//獲取form值

c# 模擬提交,post form 檔案、大資料內容

表單提交協議規定: 要先將 HTTP 要求的 Content-Type 設為 multipart/form-data,而且要設定一個 boundary 引數, 這個引數是由應用程式自行產生,它會用來識別每一份資料的邊界 (boundary), 用以產生多重資訊部份 (me

form提交資料的同時檔案程式碼示例

                              form表單提交資料的同時在表單中上傳檔案程式碼示例    一

使用form同時實現檔案提交文字資料

使用form表單同時實現上傳檔案和提交文字資料,此示例中在後臺將檔案上傳到阿里的oss儲存伺服器中 申請oss相關賬號: endpoint = "http://oss-cn-qingdao.aliyuncs.com"; accessKeyId = "key"; accessKeySecret = "secr

用forminput type="file"檔案提交前判斷)

1、用/jquery.form.js上傳檔案,提交前判斷是否選擇了檔案(之前很糾結判斷問題,寫在beforeSend裡面不管什麼情況都會提交) 2、用ajax接收資訊 3、優化提交按鈕樣式 HTML頁面程式碼: <script src="/JS/jquery.fo

H5用FormData物件提交檔案

1、如何使用 use multipart/form-data when your form includes any <input type="file"> elements. 2、怎麼

CURL模擬post提交及相關常用引數的使用(包括提交同時檔案

<form action="doLogin" method="post"> <input type="text" name="username" value="admin"/> <input type="password" nam

ajax非同步檔案,ajax提交中的檔案到後臺解析

原生ajax是不能提交檔案的,因為ajax與後臺的通訊是通過字串的. 那麼如何實現呢? 本文需要使用jquery.form.js同時,還需要引用jquery.js 以上傳excel到後臺並解析為例: 首先看一下表單的書寫. 例如: <for

Jquery不使用form非同步檔案的方法

    現在的專案中需要使用到不重新整理頁面的方式實現上傳檔案,實現方法如下: html程式碼:   檔案:<input id="file" type="file" name="file"/> <butt

使用HTMLform檔案,需要考慮的幾個問題

應用系統中經常需要有檔案上傳功能,一般的做法都是使用HTML的<form>和<input type="file">,或者使用第三方檔案上傳元件,如swfupload和uploa

非同步檔案使用new FormData($(‘#uploadForm‘)[0])序列化

/// <summary>/// 上傳新圖片,(包含檔案上傳) /// </summary>/// <returns></returns>public JsonResult UpLoad() {

nodejs 處理檔案,獲取不到資料

from表單上傳檔案時,為保證檔案正確的編碼格式,我們會為form設定 enctype="multipart/form-data" 屬性,但此時我們又不能獲取到input傳遞的值。 表單中enctyp

xUtils檔案使用表方式檔案

專案中需要進行上傳多張圖片,比如說,發表文章的時候最多可以上傳9張圖片。 List<File> filelist = new ArrayList<File>(); for (int i = 0; i < filePath.length; i+

前端 - jquery方式 / iframe +form 方式 檔案

環境與上一章一樣 jquery 方式上傳檔案: HTML程式碼 {#html程式碼開始#} <input type="file" id="img" > <button onclick="a1()">提交</button> {#

H5 通過Ajax方式檔案 使用FormData進行Ajax請求

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

AJAX POST方式檔案到後臺和下載後臺傳來的檔案

ajax 下載 原本ajax是不能下載檔案的,原因:因為response,一般請求瀏覽器是會處理伺服器輸出的response,例如生成png、檔案下載等,然而ajax請求只是個“字元型”的請求,即請求的內容是以文字型別存放的。檔案的下載是以二進位制形式進行的,雖然可以讀取到返

C#為例,分塊檔案

前臺: <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>&

通過Django的form及Ajax等多種方式檔案

如下效果: 方式一、通過Django的Form方式上傳檔案 思路:前臺html建立Form,根據格式要求完善form內標籤屬性;提交後臺後,後臺獲取前臺傳來的資料進行處理:檔案路徑儲存至資料庫,檔案內容儲存至本地資料夾中;後臺處理完成後重新整理前臺頁面。 1

使用表在springMVC的後臺檔案遇到500錯誤:The current request is not a multipart request

一、我出現錯誤的原因 是在前端的表單屬性裡沒有加入這一屬性enctype="multipart/form-data",然後繼續執行Tomcat, 上傳還是報一樣的錯誤,繼續認真觀看,發現我使用表單的預設提交方式,所以把提交方式改為method="post", 再次執行T