PHP Curl请求封装

编程入门 行业动态 更新时间:2024-10-21 11:50:20

<a href=https://www.elefans.com/category/jswz/34/1770834.html style=PHP Curl请求封装"/>

PHP Curl请求封装

php 中curl请求模块封装

<?php
namespace App\Utils;/*** http 工具类* @author Administrator**/
class HttpUtils
{private static $_instance;private function __construct(){}public static function getInstance(){if( null == self::$_instance ){self::$_instance = new HttpUtils();}return self::$_instance;}/*** http curl 请求* @param unknown $remote* @param unknown $method* @param array $data* @param array $headers* @return string*/public function curl( $remote, $method = 'GET', $data = [], $headers = [], $format = 'STRING' ){if( !$remote  ){$arrMsg[ 'code' ] = 0;$arrMsg[ 'msg' ] = 'ERROR: undefined request url';return $arrMsg;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remote );curl_setopt( $ch, CURLOPT_HEADER, false );curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( isset( $headers ) && !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}switch ( $method ){case 'GET':break;case 'PUT':curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) ); //设置请求体,提交数据包break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $data ) ); //设置请求体,提交数据包break;}break;case 'POST':curl_setopt( $ch, CURLOPT_POST, 1 );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $data ) );break;}break;case 'DELETE':curl_setopt ( $ch, CURLOPT_NOSIGNAL, true );curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );break;}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remote;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 400 <= $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'errmsg' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 获取远程数据是否正常* @param unknown $remote* @return string*/public function curlGet( $remote, $headers = [], $proxy = false ){if( !$remote  ){$arrMsg[ 'code' ] = 0;$arrMsg[ 'msg' ] = 'ERROR: undefined request url';return $arrMsg;}$curl = curl_init();curl_setopt( $curl, CURLOPT_URL, $remote );curl_setopt( $curl, CURLOPT_HEADER, false );curl_setopt( $curl, CURLOPT_TIMEOUT, 75 );curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );// 可配置随机取  USERAGENT$strUserAgent = $this->_getAgent();curl_setopt( $curl, CURLOPT_USERAGENT, $strUserAgent );curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); if( !empty( $headers ) ){curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );}if( $proxy ){// 配置多代理模式, 可进行随机切换或者指定模式切换使用代理$arrAgentINfo = $this->_getProxy();curl_setopt( $curl, CURLOPT_HTTPPROXYTUNNEL, false );curl_setopt( $curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP );curl_setopt( $curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC );// 设置代理服务器curl_setopt( $curl, CURLOPT_PROXY, $arrAgentINfo[ 'server' ] );// 设置隧道验证信息curl_setopt( $curl, CURLOPT_PROXYUSERPWD, "{$arrAgentINfo['user']}:{$arrAgentINfo['passwd']}");}$iStart = microtime( true );try{$data = curl_exec( $curl );$error_code = curl_errno( $curl );$error_info = curl_error( $curl );$curl_info = curl_getinfo( $curl );curl_close( $curl );$iUserSec = sprintf( '%0.2f', microtime( true ) - $iStart );if( isset( $error_info ) && strlen( $error_info ) > 0 ){$arrMsg[ 'code' ]   = 0;$arrMsg[ 'curl_code' ]= $error_code;$arrMsg[ 'request' ]= $remote;$arrMsg[ 'msg' ]    = 'CURL ERROR: '. $error_info;$arrMsg[ 'time' ]   = $iUserSec;return $arrMsg;}$arrMsg[ 'code' ]   = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'data' ]   = $data;$arrMsg[ 'msg' ]    = 'REMOTE: http code ' . $curl_info[ 'http_code' ];$arrMsg[ 'time' ]   = $iUserSec;}catch ( \Exception $e ){$arrMsg[ 'code' ]   = 0;$arrMsg[ 'request' ] = $remote;$arrMsg[ 'msg' ]    = 'CURL ERROR: '. $e->getMessage();$arrMsg[ 'time' ]   = $iUserSec;}return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPost( $remoteUrl, $data, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_POST, true );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 180 );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPut( $remoteUrl, $data, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 0 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 180 );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlDelete( $remoteUrl, $headers = [] ){if( !$remoteUrl ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 <= $curl_info[ 'http_code' ] && 400 > $curl_info[ 'http_code' ]){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 随机取 代理信息* @return unknown[]*/private function _getProxy(){$arrRet = array();$arrCacheProxy = config( 'agents.proxys' );$proxy = array_shift( $arrCacheProxy );$arrRet[ 'name' ]   = $proxy[ 'name' ];$arrRet[ 'server' ] = $proxy[ 'proxy' ] . ':' . $proxy[ 'port' ];if( isset( $proxy[ 'user' ] ) && $proxy[ 'user' ] ){$arrRet[ 'user' ] = $proxy[ 'user' ];}if( isset( $proxy[ 'passwd' ] ) && $proxy[ 'passwd' ] ){$arrRet[ 'passwd' ] = $proxy[ 'passwd' ];}return $arrRet;}/*** 随机获取 user-agent*/private function _getAgent(){$agent = config( 'agents.agents' );$iGNum = count( $agent );$iCurrent = rand( 0, intval( $iGNum - 1 ) );return $agent[$iCurrent];}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPostWithCookie( $remoteUrl, $data,$cookie, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_POST, true );curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie ); //设置Cookie信息保存在指定的文件中switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 0 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 240 );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 获取链接详细信息* @author	 Administrator* @datetime 2019年5月7日  下午5:39:16* @comment	* * @param unknown $url* @return array|string[]|unknown[]|mixed[]*/public function curlGetHeader( $url ){$arrRet = array();if( !$url || strlen( $url ) <= 0 ){return $arrRet;}if( !starts_with( $url , [ 'http', 'https', 'Http', 'Https', 'HTTP', 'HTTPS' ] ) ){return $arrRet;}try{$header = get_headers( $url, TRUE );if ( strpos( $header[0], 302 ) || strpos( $header[0], 301 ) ){if( isset( $header[ 'Location' ] ) && is_array( $header[ 'Location' ] ) && !empty( $header[ 'Location' ] ) ) {$url = $header[ 'Location' ][count( $header['Location'] )-1 ];}else if( isset( $header[ 'Location' ] ) ){$url =  $header[ 'Location' ];}}$urlInfo = parse_url( $url );if( isset( $urlInfo ) && !empty( $urlInfo ) ){$scheme = strtolower( $urlInfo[ 'scheme' ] );$arrRet[ 'scheme' ] = $scheme;$arrRet[ 'host' ] = strtolower( $urlInfo[ 'host' ] );$arrRet[ 'url' ] = $scheme . '://' . $urlInfo[ 'host' ];}}catch( \Exception $e ){if( preg_match( "/ssl3_get_server_certificate/i" , $e->getMessage() ) ){return $this->curlGetHeader( str_replace( 'https://' , 'http://',  $url ) );}}return $arrRet;}
}

更多推荐

PHP Curl请求封装

本文发布于:2023-11-16 08:09:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1614654.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:PHP   Curl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!