HttpClient.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace extend\api;
  3. class HttpClient
  4. {
  5. private static $boundary = '';
  6. public static function get($url, $params)
  7. {
  8. $url = $url . '?' . http_build_query($params);
  9. return self::http($url, 'GET');
  10. }
  11. public static function post($url, $params, $files = array())
  12. {
  13. $headers = array();
  14. if (!$files) {
  15. $body = http_build_query($params);
  16. } else {
  17. $body = self::build_http_query_multi($params, $files);
  18. $headers[] = "Content-Type: multipart/form-data; boundary=" . self::$boundary;
  19. }
  20. return self::http($url, 'POST', $body, $headers);
  21. }
  22. private static function http($url, $method, $postfields = NULL, $headers = array())
  23. {
  24. $ci = curl_init();
  25. curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  26. curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 100);
  27. curl_setopt($ci, CURLOPT_TIMEOUT, 100);
  28. curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
  29. curl_setopt($ci, CURLOPT_ENCODING, "");
  30. curl_setopt($ci, CURLOPT_HEADER, FALSE);
  31. switch ($method) {
  32. case 'POST':
  33. curl_setopt($ci, CURLOPT_POST, TRUE);
  34. if (!empty($postfields)) {
  35. curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
  36. }
  37. break;
  38. }
  39. curl_setopt($ci, CURLOPT_URL, $url);
  40. curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
  41. curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE);
  42. //TODO 只有本地使用 外网不用设置
  43. curl_setopt($ci, CURLOPT_SSL_VERIFYPEER,FALSE);
  44. curl_setopt($ci, CURLOPT_SSL_VERIFYHOST,FALSE);
  45. curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  46. $response = curl_exec($ci);
  47. $httpCode = curl_getinfo($ci, CURLINFO_HTTP_CODE);
  48. $httpInfo = curl_getinfo($ci);
  49. curl_close($ci);
  50. return $response;
  51. }
  52. private static function build_http_query_multi($params, $files)
  53. {
  54. if (!$params) return '';
  55. $pairs = array();
  56. self::$boundary = $boundary = uniqid('------------------');
  57. $MPboundary = '--' . $boundary;
  58. $endMPboundary = $MPboundary . '--';
  59. $multipartbody = '';
  60. foreach ($params as $key => $value) {
  61. $multipartbody .= $MPboundary . "\r\n";
  62. $multipartbody .= 'content-disposition: form-data; name="' . $key . "\"\r\n\r\n";
  63. $multipartbody .= $value . "\r\n";
  64. }
  65. foreach ($files as $key => $value) {
  66. if (!$value) {
  67. continue;
  68. }
  69. if (is_array($value)) {
  70. $url = $value['url'];
  71. if (isset($value['name'])) {
  72. $filename = $value['name'];
  73. } else {
  74. $parts = explode('?', basename($value['url']));
  75. $filename = $parts[0];
  76. }
  77. $field = isset($value['field']) ? $value['field'] : $key;
  78. } else {
  79. $url = $value;
  80. $parts = explode('?', basename($url));
  81. $filename = $parts[0];
  82. $field = $key;
  83. }
  84. $content = file_get_contents($url);
  85. $multipartbody .= $MPboundary . "\r\n";
  86. $multipartbody .= 'Content-Disposition: form-data; name="' . $field . '"; filename="' . $filename . '"' . "\r\n";
  87. $multipartbody .= "Content-Type: image/unknown\r\n\r\n";
  88. $multipartbody .= $content . "\r\n";
  89. }
  90. $multipartbody .= $endMPboundary;
  91. return $multipartbody;
  92. }
  93. }