| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?php
- /**
- * Created by PhpStorm.
- * User: chendeben
- * Date: 2018/8/17
- * Time: 下午5:26
- */
- namespace Heanup\Library;
- use Heanup\Frame\Logger;
- class Curl
- {
- private static $cookie_file = "curl_cookie.log";
- /**
- * CURL-get方式获取数据
- * @param string $url URL
- * @param string $proxy 是否代理
- * @param int $timeout 请求时间
- * @param array $header header信息 array('Host: api.kingdee.meitushop.com' )设置请求的host
- * @return string
- */
- public static function get($url, $proxy = null, $timeout = 10, $header = null,$REFERER=null)
- {
- if (!$url)
- return false;
- $ssl = stripos($url, 'https://') === 0;
- $curl = curl_init();
- if (!is_null($proxy))
- curl_setopt($curl, CURLOPT_PROXY, $proxy);
- curl_setopt($curl, CURLOPT_URL, $url);
- if ($ssl) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
- }
- if ($REFERER){
- curl_setopt($curl, CURLOPT_REFERER, $REFERER);//模拟来路
- }
- $cookie_file = self::$cookie_file;
- curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。
- curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); //包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
- curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。
- curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式
- curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数。
- if (is_array($header))
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置请求的Header
- $content = curl_exec($curl);
- $curl_errno = curl_errno($curl);
- if ($curl_errno > 0) {
- Logger::setlog($error = sprintf("curl error=%s, errno=%d.", curl_error($curl), $curl_errno));
- curl_close($curl);
- return false;
- }
- // $this->http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- curl_close($curl);
- return $content;
- }
- /**
- * CURL-post方式获取数据
- * @param string $url URL
- * @param array $data POST数据
- * @param string $proxy 是否代理
- * @param int $timeout 请求时间
- * @param array $header header信息
- * @return string
- */
- public static function post($url, $data, $proxy = null, $timeout = 10, $header = null)
- {
- if (!$url)
- return false;
- // if ($data) {
- // $data = http_build_query($data);
- // }
- $ssl = stripos($url, 'https://') === 0 ? true : false;
- $curl = curl_init();
- if (!is_null($proxy))
- curl_setopt($curl, CURLOPT_PROXY, $proxy);
- curl_setopt($curl, CURLOPT_URL, $url);
- if ($ssl) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
- }
- $cookie_file = self::$cookie_file;
- curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。
- curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); //包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
- curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。
- curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。
- curl_setopt($curl, CURLOPT_POST, true); //发送一个常规的Post请求
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //Post提交的数据包
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式
- curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数。
- if (is_array($header))
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置请求的Header
- $content = curl_exec($curl);
- $curl_errno = curl_errno($curl);
- if ($curl_errno > 0) {
- Logger::setlog($error = sprintf("curl error=%s, errno=%d.", curl_error($curl), $curl_errno));
- curl_close($curl);
- return false;
- }
- // $this->http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- curl_close($curl);
- return $content;
- }
- /**
- * CURL-put方式获取数据
- * @param string $url URL
- * @param array $data POST数据
- * @param string $proxy 是否代理
- * @param int $timeout 请求时间
- * @param array $header header信息
- * @return string
- */
- public static function put($url, $data, $proxy = null, $timeout = 10, $header = null)
- {
- if (!$url)
- return false;
- if ($data) {
- $data = http_build_query($data);
- }
- $ssl = stripos($url, 'https://') === 0 ? true : false;
- $curl = curl_init();
- if (!is_null($proxy))
- curl_setopt($curl, CURLOPT_PROXY, $proxy);
- curl_setopt($curl, CURLOPT_URL, $url);
- if ($ssl) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
- }
- $cookie_file = self::$cookie_file;
- curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。
- curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); //包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
- curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。
- curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式
- curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数
- $data = (is_array($data)) ? http_build_query($data) : $data;
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
- curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($data)));
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
- if (is_array($header))
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置请求的Header
- $content = curl_exec($curl);
- $curl_errno = curl_errno($curl);
- if ($curl_errno > 0) {
- Logger::setlog($error = sprintf("curl error=%s, errno=%d.", curl_error($curl), $curl_errno));
- curl_close($curl);
- return false;
- }
- curl_close($curl);
- return $content;
- }
- /**
- * CURL-DEL方式获取数据
- * @param string $url URL
- * @param array $data POST数据
- * @param string $proxy 是否代理
- * @param int $timeout 请求时间
- * @param array $header header信息
- * @return string
- */
- public static function del($url, $data, $proxy = null, $timeout = 10, $header = null)
- {
- if (!$url)
- return false;
- if ($data) {
- $data = http_build_query($data);
- }
- $ssl = stripos($url, 'https://') === 0 ? true : false;
- $curl = curl_init();
- if (!is_null($proxy))
- curl_setopt($curl, CURLOPT_PROXY, $proxy);
- curl_setopt($curl, CURLOPT_URL, $url);
- if ($ssl) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
- }
- $cookie_file = self::$cookie_file;
- curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //连接结束后保存cookie信息的文件。
- curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); //包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
- curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //在HTTP请求中包含一个"User-Agent: "头的字符串。
- curl_setopt($curl, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //文件流形式
- curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //设置cURL允许执行的最长秒数
- $data = (is_array($data)) ? http_build_query($data) : $data;
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DEL');
- curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($data)));
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
- if (is_array($header))
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置请求的Header
- $content = curl_exec($curl);
- $curl_errno = curl_errno($curl);
- if ($curl_errno > 0) {
- Logger::setlog($error = sprintf("curl error=%s, errno=%d.", curl_error($curl), $curl_errno));
- curl_close($curl);
- return false;
- }
- curl_close($curl);
- return $content;
- }
- }
|