淘宝SDK扒出来的CURL调用含文件上传代码
<?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调用含文件上传代码的更多相关文章
- springMVC含文件上传调用ajax无法连接后台
springMVC在使用ajax进行后台传值的时候发现找不到对应的requestMapping(""),无法进入后台,在多次试验后确定是 MultipartFile对象与ajax冲 ...
- 利用 PHP CURL zip压缩文件上传
$postData['file'] = "@".getcwd()."/../attachment/qianbao/{$customer_id}.zip"; $t ...
- curl文件上传有两种方式,一种是post_fileds,一种是infile
curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...
- 接入淘宝SDK(OneSDK)和支付宝SDK(AlipaySDK)出现 duplicate symbols for architecture i386
起初我在我的项目中先接入了AlipaySDK,没有出现什么问题,之后想要接入淘宝SDK之后,就出现了duplicate symbols for architecture i386的错误 经过一段时间排 ...
- php curl文件上传兼容php5.0~5.6各版本
PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...
- Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案
import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...
- php curl向远程服务器上传文件
<?php /** * test.php: */ header('content-type:text/html;charset=utf8'); $ch = curl_init(); //加@符号 ...
- FileZilla命令行实现文件上传以及CreateProcess实现静默调用
应用需求: 用户在选择渲染作业时面临两种情况:一是选择用户远程存储上的文件:二是选择本地文件系统中的文件进行渲染.由于渲染任务是在远程主机上进行的,实际进行渲染时源文件也是在ftp目录 ...
- 百度editor调用【图片上传阿里云】
百度editor调用简单,但是图片和文件上传阿里云就有点难度了.下面我详细说一下. 百度富文本编辑器下载地址:http://ueditor.baidu.com/website/download.htm ...
随机推荐
- rocketmq查看命令
首先进入 RocketMQ 工程,进入/RocketMQ/bin 在该目录下有个 mqadmin 脚本 . 查看帮助: 在 mqadmin 下可以查看有哪些命令 a: 查看具体命令的使 ...
- [转]VS2012 快捷键
Ctrl+E,D ----格式化全部代码 Ctrl+A+K+F Ctrl+E,F ----格式化选中的代码 Ctrl+K+F CTRL + SHIFT + B生成解决方案 Al ...
- vue-resource
代替ajax操作 在mian.js里面引入 import vueResource from 'vue-resource' mian.js会 加载全局js 下面介绍的是基于Vue实例的方式,一般项目只需 ...
- Myeclipse导包总是报错,jar包路径都没问题
是访问限制报错. 方法一: 全局属性Project>preferences>java>Compiler>Errors/Warnings>把右侧的[Deprecated a ...
- sqlserver中BCP命令导入导出
个人自用导出文本文件命令: bcp [xxDB].[dbo].[xx_tb_name] out d:\temp\xxx.txt -c -t "\t" -T bcp是SQL Serv ...
- python学习笔记(4)--函数
1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...
- 剑指Offer-【面试题02:实现Singleton 模式——七种实现方式】
题目:设计一个类,我们只能生成该类的一个实例 package com.cxz.demo02; /** * Created by CXZ on 2016/9/13. */ public class Si ...
- oracle sql 执行计划分析
转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...
- Office文档在线预览
工具说明:通过传入文档的Web地址,即可进行Office文档的在线预览. 使用方式: 在http://office.qingshanboke.com地址后,通过url参数传入您想预览的文件路径. 如: ...
- PhpStorm/Xdebug安装使用
安装环境:XAMPP;phpStorm版本10; windows 7 64bit. XAMPP.phpStorm 都直接安装在了D盘根目录,9999m目录建在D:\xampp\htocts下,即目录工 ...