function uploadLocalFile($filepath, $params) { if (empty($filepath)) { throw new Exception('$filepath is required'); } if (empty($params) || !is_array($params)) { throw new Exception('$params is required'); } if (class_exists("CURLFile")) { $params['_up_file'] = new \CURLFile($filepath); } else { $params['_up_file'] = '@' . $filepath; } $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //在发起连接前等待的时间,如果设置为0,则无限等待。 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //设置cURL允许执行的最长秒数。 curl_setopt($ch, CURLOPT_URL, $this->uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); //启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。 curl_setopt($ch, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($ch, CURLOPT_POSTFIELDS, $params); //全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。 $output = curl_exec($ch); //将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出 curl_close($ch); }
function downloadRemoteFile($info, $saveTo) { $hander = curl_init(); $fp = fopen($saveTo, 'wb'); curl_setopt($hander, CURLOPT_URL, $info['sign_url']); curl_setopt($hander, CURLOPT_FILE, $fp); //设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。 curl_setopt($hander, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出 curl_setopt($hander, CURLOPT_FOLLOWLOCATION, 1); //在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。 curl_setopt($hander, CURLOPT_TIMEOUT, 10); curl_exec($hander); $curl_errno = curl_errno($hander); $curl_error = curl_error($hander); curl_close($hander); fclose($fp); }
1、post https提交 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
function curl_post2( $url = '' , $postdata = '' , $options = array ()){
$ch = curl_init( $url );
curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt( $ch , CURLOPT_USERAGENT, $_SERVER [ 'HTTP_USER_AGENT' ]);
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch , CURLOPT_POST, 1);
curl_setopt( $ch , CURLOPT_POSTFIELDS, $postdata );
curl_setopt( $ch , CURLOPT_TIMEOUT, 20);
if (! empty ( $options )){
curl_setopt_array( $ch , $options );
}
$data = curl_exec( $ch );
curl_close( $ch );
return $data ;
} |
2、普通post提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//通过curl模拟post的请求; function SendDataByCurl( $url , $data = array ()){
//对空格进行转义
$url = str_replace ( ' ' , '+' , $url );
$ch = curl_init();
//设置选项,包括URL
curl_setopt( $ch , CURLOPT_URL, "$url" );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch , CURLOPT_HEADER, 0);
curl_setopt( $ch ,CURLOPT_TIMEOUT,3); //定义超时3秒钟
// POST数据
curl_setopt( $ch , CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data )); //所需传的数组用http_bulid_query()函数处理一下,就ok了
//执行并获取url地址的内容
$output = curl_exec( $ch );
$errorCode = curl_errno( $ch );
//释放curl句柄
curl_close( $ch );
if (0 !== $errorCode ) {
return false;
}
return $output ;
} function curl_post( $url = '' , $postdata = '' , $options = array ()){
$ch = curl_init( $url );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch , CURLOPT_POST, 1);
curl_setopt( $ch , CURLOPT_POSTFIELDS, $postdata );
curl_setopt( $ch , CURLOPT_TIMEOUT, 5);
if (! empty ( $options )){
curl_setopt_array( $ch , $options );
}
$data = curl_exec( $ch );
curl_close( $ch );
return $data ;
} |
3、curl get提交
1
2
3
4
5
6
7
8
9
10
11
|
function curl_get( $url = '' , $options = array ()){
$ch = curl_init( $url );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch , CURLOPT_TIMEOUT, 5);
if (! empty ( $options )){
curl_setopt_array( $ch , $options );
}
$data = curl_exec( $ch );
curl_close( $ch );
return $data ;
} |
参考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
function vpost( $url , $data , $cookie ){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt( $curl , CURLOPT_URL, $url ); // 要访问的地址
curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt( $curl , CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt( $curl , CURLOPT_USERAGENT, $_SERVER [ 'HTTP_USER_AGENT' ]); // 模拟用户使用的浏览器
curl_setopt( $curl , CURLOPT_COOKIE, $cookie );
curl_setopt( $curl , CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt( $curl , CURLOPT_POSTFIELDS, $data ); // Post提交的数据包
curl_setopt( $curl , CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt( $curl , CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt( $curl , CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec( $curl ); // 执行操作
if (curl_errno( $curl )) {
echo 'Errno' .curl_error( $curl ); //捕抓异常
}
curl_close( $curl ); // 关闭CURL会话
return $tmpInfo ; // 返回数据
} |