HttpCurl.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. namespace Tool\MayouTool;
  3. use Curl\Curl;
  4. use Tool\MayouTool\Exception\HttpCustomeException;
  5. class HttpCurl
  6. {
  7. /**
  8. * @var $curl Curl
  9. */
  10. static $curl;
  11. /**
  12. * @var int 超时时间
  13. */
  14. static $timeOut = 180;
  15. /**
  16. * @var int 连接超时时间
  17. */
  18. static $connectTimeOut = 5;
  19. /**
  20. * @param string $url 请求地址
  21. * @param array $params 请求参数
  22. * @param array $headers 请求头
  23. */
  24. public static function getCurl(string $url,array $params=[],array $headers=[],$ssl=false)
  25. {
  26. //判断是否存在traceId
  27. if(isset($_GET["traceId"])){
  28. $headers["traceId"] = $_GET["traceId"];
  29. }
  30. self::$curl = $curl = new Curl();
  31. //设置超时时间
  32. $curl->setOpt(CURLOPT_TIMEOUT,self::$timeOut);
  33. //设置连接超时时间
  34. $curl->setOpt(CURLOPT_CONNECTTIMEOUT,self::$connectTimeOut);
  35. //塞入header头
  36. foreach ($headers as $key=>$header){
  37. $curl->setHeader($key,$header);
  38. }
  39. if(!$ssl){
  40. $curl->setOpt(CURLOPT_SSL_VERIFYPEER,false);
  41. $curl->setOpt(CURLOPT_SSL_VERIFYHOST,false);
  42. }
  43. //塞入参数
  44. $curl->get($url,$params);
  45. return json_decode($curl->response,true);
  46. }
  47. /**
  48. * @param string $url 请求地址
  49. * @param array $params 请求参数
  50. * @param array $headers 请求头
  51. * @param bool $asJson 是否json传输(true是 false否)
  52. */
  53. public static function postCurl($url,$params=[],$headers=[],$asJson=true,$ssl=false)
  54. {
  55. //判断是否存在traceId
  56. if(isset($_GET["traceId"])){
  57. $headers["traceId"] = $_GET["traceId"];
  58. }
  59. self::$curl = $curl = new Curl();
  60. //设置超时时间
  61. $curl->setOpt(CURLOPT_TIMEOUT,self::$timeOut);
  62. //设置连接超时时间
  63. $curl->setOpt(CURLOPT_CONNECTTIMEOUT,self::$connectTimeOut);
  64. //塞入header头
  65. foreach ($headers as $key=>$header){
  66. $curl->setHeader($key,$header);
  67. }
  68. //判断是否json请求
  69. if($asJson){
  70. $curl->setHeader("Content-Type","application/json;charset=utf-8");
  71. }
  72. if(!$ssl){
  73. $curl->setOpt(CURLOPT_SSL_VERIFYPEER,false);
  74. $curl->setOpt(CURLOPT_SSL_VERIFYHOST,false);
  75. }
  76. //塞入参数
  77. $curl->post($url,$params,$asJson);
  78. return json_decode($curl->response,true);
  79. }
  80. /**
  81. * @param string $url 请求地址
  82. * @param array $params 请求参数
  83. * @param array $headers 请求头
  84. */
  85. public static function getCurlOrigin(string $url,array $params=[],array $headers=[],$ssl=false)
  86. {
  87. //判断是否存在traceId
  88. if(isset($_GET["traceId"])){
  89. $headers["traceId"] = $_GET["traceId"];
  90. }
  91. self::$curl = $curl = new Curl();
  92. //设置超时时间
  93. $curl->setOpt(CURLOPT_TIMEOUT,self::$timeOut);
  94. //设置连接超时时间
  95. $curl->setOpt(CURLOPT_CONNECTTIMEOUT,self::$connectTimeOut);
  96. //塞入header头
  97. foreach ($headers as $key=>$header){
  98. $curl->setHeader($key,$header);
  99. }
  100. if(!$ssl){
  101. $curl->setOpt(CURLOPT_SSL_VERIFYPEER,false);
  102. $curl->setOpt(CURLOPT_SSL_VERIFYHOST,false);
  103. }
  104. //塞入参数
  105. $curl->get($url,$params);
  106. return $curl->response;
  107. }
  108. /**
  109. * @param string $url 请求地址
  110. * @param array $params 请求参数
  111. * @param array $headers 请求头
  112. * @param bool $asJson 是否json传输(true是 false否)
  113. */
  114. public static function postCurlOrigin($url,$params=[],$headers=[],$asJson=true,$ssl=false)
  115. {
  116. //判断是否存在traceId
  117. if(isset($_GET["traceId"])){
  118. $headers["traceId"] = $_GET["traceId"];
  119. }
  120. self::$curl = $curl = new Curl();
  121. //设置超时时间
  122. $curl->setOpt(CURLOPT_TIMEOUT,self::$timeOut);
  123. //设置连接超时时间
  124. $curl->setOpt(CURLOPT_CONNECTTIMEOUT,self::$connectTimeOut);
  125. //塞入header头
  126. foreach ($headers as $key=>$header){
  127. $curl->setHeader($key,$header);
  128. }
  129. //判断是否json请求
  130. if($asJson){
  131. $curl->setHeader("Content-Type","application/json;charset=utf-8");
  132. }
  133. if(!$ssl){
  134. $curl->setOpt(CURLOPT_SSL_VERIFYPEER,false);
  135. $curl->setOpt(CURLOPT_SSL_VERIFYHOST,false);
  136. }
  137. //塞入参数
  138. $curl->post($url,$params,$asJson);
  139. return $curl->response;
  140. }
  141. /**
  142. * 后端转发上传文件
  143. * @param string $url
  144. * @param string $filepath
  145. */
  146. public static function uploadFile(string $url,string $filepath)
  147. {
  148. $file = new \CURLFile($filepath,"application/octet-stream");
  149. $data = [
  150. "media"=>$file
  151. ];
  152. $ch = curl_init($url);
  153. curl_setopt($ch,CURLOPT_POST,1);
  154. curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
  155. curl_setopt($ch,CURLOPT_HTTPHEADER,["multipart/form-data"]);
  156. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  157. curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
  158. $result = curl_exec($ch);
  159. if(curl_errno($ch)){
  160. curl_close($ch);
  161. throw new HttpCustomeException("文件上传失败");
  162. }
  163. curl_close($ch);
  164. $res = json_decode($result,1);
  165. if($res["errcode"]==0){
  166. return $res["media_id"];
  167. }
  168. }
  169. }