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 ; // 返回数据 } |