<?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. Mac 使用Sublime Text 3 搭建C开发环境

    Sublime Text 3  (安装包,注册码 ,汉化包) 1)工具-编译系统-新建编译器 { "cmd" : ["gcc -o ${file_base_name} $ ...

  2. ubuntu 配置VPN

    1.  sudo apt-get install pptpd 2.  修改/etc/pptpd.conf , vi /etc/pptpd.conf 找到#localip 192.168.0.1和#re ...

  3. Touch ID 实现

    Touch ID 1.要求 机型:iPhone 5s以上 系统:iOS8以上 框架:#import <LocalAuthentication/LocalAuthentication.h> ...

  4. 还敢说你是程序员?一律师闲着没事写了个app,用户量600万

    今天周五,是我在上海上班的第五天. 这几天怎么说呢,跟混日子差不多,因为处处有“”惊喜”. 上班第一天领来办公电脑,登上自己的公司邮箱,惊喜来了!我的擦擦擦,全TM是英文呐!作为一个从村儿里来的码农, ...

  5. cnetos7.0 安装mysql

    CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载 [root@localhost ~]# wget http://dev.mysql.com/ge ...

  6. __clone()方法和传址区别

    示例: <?php class Computer{ public $name = '联想'; public function _run(){ return '运行中'; } } $comp1 = ...

  7. KNN识别图像上的数字及python实现

    领导让我每天手工录入BI系统中的数据并判断数据是否存在异常,若有异常点,则检测是系统问题还是业务问题.为了解放双手,我决定写个程序完成每天录入管理驾驶舱数据的任务.首先用按键精灵录了一套脚本把系统中的 ...

  8. *****linux下redis安装

    我用的系统是:redhat [root@infa ~]# wget http://download.redis.io/releases/redis-2.8.12.tar.gz tar xzf redi ...

  9. Duilib源码分析(六)整体流程

    在<Duilib源码分析(一)整体框架>.<Duilib源码分析(二)控件构造器—CDialogBuilder>以及<Duilib源码分析(三)XML解析器—CMarku ...

  10. ppmoney

    build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...