<?php
function curl($url,$postFields=null){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FAILONERROR,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//if($this->readTimeout){
curl_setopt($ch,CURLOPT_TIMEOUT,300);
//}
//if($this->connectTimeout){
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
//}
curl_setopt($ch,CURLOPT_USERAGENT,"top-sdk-php");
//https 请求
if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
} //POST
if(is_array($postFields)&&0<count($postFields)){
$postBodyString="";
$postMultipart=false;
foreach($postFields as $k=>$v){
if(!is_string($v))
continue ;
//判断是不是文件上传
if("@"!=substr($v,0,1)){
$postBodyString.="$k=".urlencode($v)."&";
}else{
//文件上传用multipart/form-data,否则用www-form-urlencoded
$postMultipart=true;
if(class_exists('\CURLFile')){
$postFields[$k]=new \CURLFile(substr($v,1));
}
}
}
unset($k,$v);
curl_setopt($ch,CURLOPT_POST,true);
if($postMultipart){
if(class_exists('\CURLFile')) {
curl_setopt($ch,CURLOPT_SAFE_UPLOAD,true);
}else{
if(defined('CURLOPT_SAFE_UPLOAD')){
curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);
}
}
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);
}else{
$header=array("content-type:application/x-www-form-urlencoded;charset=UTF-8");
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_setopt($ch,CURLOPT_POSTFIELDS,substr($postBodyString,0,-1));
}
}
$reponse=curl_exec($ch);
if (curl_errno($ch)){
throw new Exception(curl_error($ch),0);
}else{
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if(200!==$httpStatusCode){
throw new Exception($reponse,$httpStatusCode);
}
}
curl_close($ch);
return $reponse;
} function curl_with_memory_file($url, $postFields = null, $fileFields = null){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_FAILONERROR,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//if($this->readTimeout){
curl_setopt($ch,CURLOPT_TIMEOUT,300);
//}
//if($this->connectTimeout){
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
//}
curl_setopt($ch,CURLOPT_USERAGENT,"top-sdk-php" );
//https 请求
if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
//生成分隔符
$delimiter='-------------'.uniqid();
//先将post的普通数据生成主体字符串
$data='';
if($postFields!=null){
foreach($postFields as $name=>$content) {
$data.="--".$delimiter."\r\n";
$data.='Content-Disposition:form-data;name="'.$name.'"';
//multipart/form-data 不需要urlencode,参见 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data
$data.="\r\n\r\n".$content."\r\n";
}
unset($name,$content);
} //将上传的文件生成主体字符串
if($fileFields!=null){
foreach($fileFields as $name=>$file) {
$data.="--".$delimiter."\r\n";
$data.='Content-Disposition:form-data; name="'.$name.'";filename="'.$file['name']."\"\r\n";
$data.='Content-Type:'.$file['type']."\r\n\r\n";//多了个文档类型
$data.=$file['content']."\r\n";
}
unset($name,$file);
}
//主体结束的分隔符
$data.="--".$delimiter."--";
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'Content-Type: multipart/form-data;boundary='.$delimiter,
'Content-Length:'.strlen($data))
);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $reponse=curl_exec($ch);
unset($data); if(curl_errno($ch)){
throw new Exception(curl_error($ch),0);
}else{
$httpStatusCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if (200!==$httpStatusCode){
throw new Exception($reponse,$httpStatusCode);
}
}
curl_close($ch);
return $reponse;
} print_r(curl_with_memory_file("http://localhost/aa.php",
array("a"=>1,"b"=>2),
array(
array(
"name"=>"a.png",
"type"=>"application/x-png",
"content"=>file_get_contents("http://pic002.cnblogs.com/images/2011/42876/2011050119000033.png")
),
array(
"name"=>"b.png",
"type"=>"application/x-png",
"content"=>file_get_contents("http://pic002.cnblogs.com/images/2011/42876/2011050119000033.png")
)
)
));
print_r(curl("http://localhost/aa.php",array("a"=>1,"b"=>2,"c"=>3,"d"=>"@d:/TB1eH7vNFXXXXcLXpXXwu0bFXXX.png")));
?>

附件:http://files.cnblogs.com/files/mengdejun/curl_fun.zip

淘宝SDK扒出来的CURL调用含文件上传代码的更多相关文章

  1. springMVC含文件上传调用ajax无法连接后台

    springMVC在使用ajax进行后台传值的时候发现找不到对应的requestMapping(""),无法进入后台,在多次试验后确定是 MultipartFile对象与ajax冲 ...

  2. 利用 PHP CURL zip压缩文件上传

    $postData['file'] = "@".getcwd()."/../attachment/qianbao/{$customer_id}.zip"; $t ...

  3. curl文件上传有两种方式,一种是post_fileds,一种是infile

    curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...

  4. 接入淘宝SDK(OneSDK)和支付宝SDK(AlipaySDK)出现 duplicate symbols for architecture i386

    起初我在我的项目中先接入了AlipaySDK,没有出现什么问题,之后想要接入淘宝SDK之后,就出现了duplicate symbols for architecture i386的错误 经过一段时间排 ...

  5. php curl文件上传兼容php5.0~5.6各版本

    PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...

  6. Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案

    import java.io.File;   import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...

  7. php curl向远程服务器上传文件

    <?php /** * test.php: */ header('content-type:text/html;charset=utf8'); $ch = curl_init(); //加@符号 ...

  8. FileZilla命令行实现文件上传以及CreateProcess实现静默调用

    应用需求:         用户在选择渲染作业时面临两种情况:一是选择用户远程存储上的文件:二是选择本地文件系统中的文件进行渲染.由于渲染任务是在远程主机上进行的,实际进行渲染时源文件也是在ftp目录 ...

  9. 百度editor调用【图片上传阿里云】

    百度editor调用简单,但是图片和文件上传阿里云就有点难度了.下面我详细说一下. 百度富文本编辑器下载地址:http://ueditor.baidu.com/website/download.htm ...

随机推荐

  1. css单位盘点

    css单位有:px,em,rem,vh,vw,vmin,vmax,ex,ch 等等 1.px单位最常见,也最直接,这里不做介绍. 2.em:em的值并不是固定,它继承父级元素的字体大小,所以层数越深字 ...

  2. urlencode遇到中文编码问题

    urlencode并不会改变输入的编码格式, 默认会将中文输出为 gbk 编码, 类似的, quote 会对中文进行 gbk 编码 不过, 当遇到嵌套多层的字典时, 问题就来了, 中文会被 utf8 ...

  3. myql 查询树形表结果:说说、说说的述评、评论的回复

    myql 查询树形表结果:说说.说说的评论.评论的回复 有三张表关联表: 用户的说说表(ixt_customer_note) 说说的评论表(ixt_customer_note_comment) 评论的 ...

  4. Qt在ui中使用代码添加新的控件

    QLabel* label = new QLabel(ui->centralWidget);

  5. 解决java.lang.IncompatibleClassChangeError: Implementing class

    jar包冲突(有重复jar) 仔细检查

  6. JS身份证号码校验

    var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0 ...

  7. 让textarea完全显示文章并且不滚动、不可拖拽、不可编辑

    textarea { width: 100%; border: none; outline: none; resize: none; overflow: hidden; padding-bottom: ...

  8. 【Java远程debug】

    转自 http://blog.csdn.net/hongchangfirst/article/details/44191925 一.远程debug原理 Java远程调试的原理是两个JVM之间通过deb ...

  9. [UWP]使用AdaptiveTrigger实现自适应布局

    这篇博客将介绍如何在UWP开发中使用AdaptiveTrigger实现自适应布局. 场景1:窗体宽度大于800时,窗体背景色为绿色,窗体在0到800之间为蓝色. XAML Code: <Grid ...

  10. Officel常用操作

    Excel: 1.隔行变色|菜单->条件格式->其它规则->使用公式->"=MOD(ROW(),2)=0" 2.查找包含特定字符的单元格,并替换整个单元格 ...