YZHttpClient.php 3.8 KB

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