C语言代码如下:
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURL *curl;
CURLcode res;
struct curl_httppost *post=NULL;
struct curl_httppost *last=NULL;
struct curl_slist *headerlist=NULL;
static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL);
curl_formadd(&post,
&last,
CURLFORM_COPYNAME, "Msg_ID",
CURLFORM_COPYCONTENTS, "1423638030.127737481@websense.com", CURLFORM_END);
curl_formadd(&post,
&last,
CURLFORM_COPYNAME, "Url",
CURLFORM_COPYCONTENTS, "http://www.aaa.com\nhttp://www.bbb.com", CURLFORM_END);
curl_formadd(&post,
&last,
CURLFORM_COPYNAME, "File",
CURLFORM_FILE, "attachment_1",
CURLFORM_FILE, "attachment_2", CURLFORM_END);
curl = curl_easy_init();
/* initalize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://10.236.5.128/cgi-bin/backup");
if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
/* only disable 100-continue header if explicitly requested */
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
/* then cleanup the formpost chain */
curl_formfree(post);
/* free slist */
curl_slist_free_all (headerlist);
}
return 0;
}
http消息如下:
POST /cgi-bin/backup HTTP/1.1
Host: 10.236.5.128
Accept: */*
Content-Length: 875
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------8ca239ff87fe
HTTP/1.1 100 Continue
------------------------------8ca239ff87fe
Content-Disposition: form-data; name="Msg_ID"
1423638030.127737481@websense.com
------------------------------8ca239ff87fe
Content-Disposition: form-data; name="Url"
http://www.aaa.com
http://www.bbb.com
------------------------------8ca239ff87fe
Content-Disposition: form-data; name="File"
Content-Type: multipart/mixed, boundary=----------------------------81da9bb1e39e
------------------------------81da9bb1e39e
Content-Disposition: attachment; filename="attachment_1"
Content-Type: application/octet-stream
hello
I'm the first attachment
------------------------------81da9bb1e39e
Content-Disposition: attachment; filename="attachment_2"
Content-Type: application/octet-stream
hi
I'm the second attachment
------------------------------81da9bb1e39e--
------------------------------8ca239ff87fe--
HTTP/1.1 200 OK
Date: Thu, 12 Feb 2015 09:36:06 GMT
Server: Apache/2.2.15 (CentOS)
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8