21,886
社区成员
发帖
与我相关
我的任务
分享
int main()
{ curl_global_init(CURL_GLOBAL_WIN32);
CURL *easy_handle = curl_easy_init();
// 使用multi-parts form post
curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx); curl_httppost *post = NULL; curl_httppost *last = NULL;
// 文本数据
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, "JGood", CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "address", CURLFORM_COPYCONTENTS, "HangZhou", CURLFORM_END);
// 文本文件中的数据
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILECONTENT, "ReadMe.txt", CURLFORM_END);
curl_easy_setopt(easy_handle, CURLOPT_HTTPPOST, post);
curl_easy_perform(easy_handle);
curl_formfree(post);
curl_easy_cleanup(easy_handle);
curl_global_cleanup();
return 0;
}
//最后要说明的是,所有在easy handle上设置的属性都是”sticky”的,什么意思?就是说在easy handle上设置的属性都将被保存,即使执行完curl_easy_perform之后,这些属性值仍然存在。通过将CURLOPT_HTTPGET设为1可以使easy handle回到最原始的状态:
curl_easy_setopt(easy_handle, CURLOPT_HTTPGET, 1L);
$varname = 'my';
$name = '3.txt';
$type = 'text/plain';
$key = <<< TEXT
$varname"; filename="$name
Content-Type: $type
TEXT;
$fields[$key] = $contents;
$contents =<<< 'TEXT'
数据报中应该是
Content-Disposition: form-data; name="userfile"; filename="file_name"
Content-Type: 文档类型
文件内容
这样的格式,我只实现了文件名部分,文档类型不知道如何实现。
这样上传后就取不到 type 的值
curl_upload_server.php
<xmp>
<?php
print_r($_FILES);
echo "文件内容:\n";
$p = current($_FILES);
readfile($p['tmp_name']);
TEXT;
$fields['f"; filename="x.x'] = $contents; //这个关联键的写法很怪异吧?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://localhost/curl_upload_server.php");
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$s = curl_exec ($ch);
curl_close ($ch);
echo $s;