Network.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2024 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\common\library;
  13. use cores\exception\BaseException;
  14. /**
  15. * 网络请求工具类
  16. * Class Network
  17. * @package app\common\library
  18. */
  19. class Network
  20. {
  21. /**
  22. * GET请求
  23. * @param string $url
  24. * @param array $query
  25. * @param array $headers
  26. * @return bool|string
  27. * @throws BaseException
  28. */
  29. public static function curlGet(string $url, array $query = [], array $headers = [])
  30. {
  31. $ch = curl_init();
  32. curl_setopt($ch, CURLOPT_URL, !empty($query) ? $url . '?' . http_build_query($query) : $url);
  33. if ($headers) {
  34. if (isset($headers['user_agent'])) {
  35. curl_setopt($ch, CURLOPT_USERAGENT, $headers['user_agent']);
  36. }
  37. if (isset($headers['refer'])) {
  38. curl_setopt($ch, CURLOPT_REFERER, $headers['refer']);
  39. }
  40. if (isset($headers['cookie'])) {
  41. curl_setopt($ch, CURLOPT_COOKIE, $headers['cookie']);
  42. }
  43. curl_setopt($ch, CURLOPT_HEADER, $headers); // 设置header
  44. }
  45. // 返回最后的Location
  46. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  47. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  48. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  49. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  50. $result = curl_exec($ch);
  51. if (curl_errno($ch)) {
  52. $errorMessage = serialize(curl_error($ch));
  53. throwError("访问网络[{$url}]出错(GET):" . $errorMessage);
  54. }
  55. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  56. curl_close($ch);
  57. if ($httpCode != 200) {
  58. throwError("访问网络[{$url}]出错(GET):" . $result);
  59. }
  60. if (empty($headers)) {
  61. return $result;
  62. }
  63. [, $body] = explode("\r\n\r\n", $result, 2);
  64. return $body;
  65. }
  66. /**
  67. * POST请求
  68. * @param string $url
  69. * @param array $data 提交的内容
  70. * @param array $headers 头部信息
  71. * @param string $cert 证书
  72. * @param string $certKey 证书秘钥
  73. * @return bool|string
  74. * @throws BaseException
  75. */
  76. public static function curlPost(string $url, array $data, array $headers = [], string $cert = '', string $certKey = '')
  77. {
  78. $ch = curl_init();
  79. curl_setopt($ch, CURLOPT_URL, $url);
  80. curl_setopt($ch, CURLOPT_HEADER, $headers); // 设置header
  81. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  82. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  83. // 证书默认格式为PEM
  84. if ($cert && $certKey) {
  85. curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
  86. curl_setopt($ch, CURLOPT_SSLCERT, $cert);
  87. curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
  88. curl_setopt($ch, CURLOPT_SSLKEY, $certKey);
  89. }
  90. curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
  91. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  92. $result = curl_exec($ch);
  93. if (curl_errno($ch)) {
  94. $errorMessage = serialize(curl_error($ch));
  95. throwError("访问网络[{$url}]出错(GET):" . $errorMessage);
  96. }
  97. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  98. curl_close($ch);
  99. if ($httpCode != 200) {
  100. throwError("访问网络[{$url}]出错(GET):" . $result);
  101. }
  102. return $result;
  103. }
  104. }