php httppost请求类

<?php /*************************************************************************** * * Copyright (c) 2013, Inc. All Rights Reserved * **************************************************************************/ /** * HTTP客户辅助类 * @author Administrator * */ class httpClient { /** * 错误信息 * @var string */ public static $errMsg = null; /** * 获取错误信息 */ public static function getErrorMsg() { return self::$errMsg; } /** * 发送POST请求 * @param string $url URL地址 * @param array $params POST参数 * @param number $timeout 超时时间 */ public static function post($url, $params = NULL, $timeout = 8) { $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // 让cURL自己判断使用哪个版本 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); // 在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 返回原生的(Raw)输出 curl_setopt($curl, CURLOPT_ENCODING, FALSE); // HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 // curl_setopt($curl, CURLOPT_FRESH_CONNECT, true); // 强制使用新连接 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_HEADER, FALSE); // 启用时会将头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_POST, TRUE); if (!empty($params) && is_array($params) && count($params) >= 1) { curl_setopt($curl, CURLOPT_POSTFIELDS, $params); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE); $response = curl_exec($curl); curl_close($curl); return $response; } /** * 发送POST请求,参数以JSON格式传递 * * @param string $url URL地址 * @param array $params POST参数 * @param number $timeout 超时时间 */ public static function postJSON($url, $params = NULL, $timeout = 8) { $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // 让cURL自己判断使用哪个版本 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); // 在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 返回原生的(Raw)输出 curl_setopt($curl, CURLOPT_ENCODING, FALSE); // HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_HEADER, FALSE); // 启用时会将头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_POST, TRUE); if (!empty($params) && is_array($params) && count($params) >= 1) { $jsonStr = json_encode($params); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($jsonStr), )); curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonStr); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE); $response = curl_exec($curl); curl_close($curl); return $response; } /** * 发送POST请求,参数以XML格式传递 * * @param string $url URL地址 * @param string $xml xml字符串参数 * @param number $timeout 超时时间 */ public static function postXML($url, $xml = NULL, $timeout = 8) { $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // 让cURL自己判断使用哪个版本 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); // 在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 返回原生的(Raw)输出 curl_setopt($curl, CURLOPT_ENCODING, FALSE); // HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_HEADER, FALSE); // 启用时会将头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_POST, TRUE); if (!empty($xml)) { curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Length: ' . strlen($xml), )); curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE); $response = curl_exec($curl); curl_close($curl); return $response; } /** * 发送GET请求 * @param string $url URL地址 * @param number $timeout 超时时间 * @param string $agent 客户端信息 */ public static function get($url,$timeout = 8, $agent = null) { $agent = $agent?$agent:$_SERVER['HTTP_USER_AGENT']; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, $agent); // 在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); // 在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 返回原生的(Raw)输出 curl_setopt($curl, CURLOPT_ENCODING, ""); // HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 curl_setopt($curl, CURLOPT_HEADER, FALSE); $response = curl_exec($curl); curl_close($curl); return $response; } public static function get1($url,$timeout = 8) { file_put_contents(ROOT_PATH.'/txt/1.txt',$url); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 5秒超时 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $responseText = curl_exec($curl); curl_close($curl); return $responseText; } /** * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 * @param $para 需要拼接的数组 * return 拼接完成以后的字符串 */ public static function createLinkstring($para) { $arg = ""; foreach ($para as $key=>$val){ $arg .= ($key . '=' . $val . '&'); } //去掉最后一个&字符 $arg = substr($arg, 0, count($arg)-2); //如果存在转义字符,那么去掉转义 if(get_magic_quotes_gpc()){$arg = stripslashes($arg);} return $arg; } /** * 发送POST请求(平安接口自定义方法) * @param string $url URL地址 * @param string $xml POST参数 * @param number $timeout 超时时间 */ public static function postXMLPingan($url, $xml = NULL, $timeout = 8) { $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // 让cURL自己判断使用哪个版本 curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Length: ' . strlen($xml) )); curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); // 在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 返回原生的(Raw)输出 curl_setopt($curl, CURLOPT_ENCODING, FALSE); // HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_HEADER, FALSE); // 启用时会将头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE); $response = curl_exec($curl); curl_close($curl); // 编码转换 $response = str_replace('encoding="GBK"', 'encoding="UTF-8"', $response); $response = iconv('GBK', 'UTF-8', $response); return $response; } /** * 发送异步非阻塞GET请求 * * @param string $url URL地址 * @param number $timeout 请求等待时间,默认8秒 * @return boolean 是否请求成功 */ public static function asyncGET($url, $timeout = 8) { $matches = parse_url($url); $host = $matches['host']; $path = $matches['path'] ? $matches['path'].(isset($matches['query']) && $matches['query'] ? '?'.$matches['query'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80; $out = "GET $path HTTP/1.0\r\n"; $out .= "Accept: */*\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "Long-Task: ok\r\n"; $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n"; $out .= "Cookie: \r\n\r\n"; $fp = fsockopen($host, $port, $errno, $errstr, $timeout); if(!$fp) { return false; } else { stream_set_blocking($fp, false); stream_set_timeout($fp, $timeout); fwrite($fp, $out); fclose($fp); return true; } } /** * 发送Socket请求 * * @param string $address IP地址 * @param number $port 端口号 * @param string $msg 消息 * * @return boolean|string 消息或false */ public static function socket($address, $port, $msg) { // 创建 TCP/IP socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if($socket < 0) { self::$errMsg = '连接创建失败!'; return false; } $result = socket_connect($socket, $address, $port); if ($result < 0) { self::$errMsg = '连接失败:' . socket_strerror($result); return false; } // 发送消息 socket_write($socket, $msg, strlen($msg)); $output = ''; while ($out = socket_read($socket, 2048)) { $output .= $out; } socket_close($socket); return $output; } /** * 发送异步非阻塞Socket请求 * * @param string $address IP地址 * @param number $port 端口号 * @param string $msg 消息 * * @return boolean|string 消息或false */ public static function asyncSocket($address, $port, $msg) { $fp = fsockopen($address, $port, $errno, $errstr, 5); if(!$fp) { return false; } else { stream_set_blocking($fp, false); stream_set_timeout($fp, 5); fwrite($fp, $msg); fclose($fp); return true; } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值