HttpRequest.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wilson
  5. * Date: 16/7/7
  6. * Time: 11:31
  7. */
  8. namespace app\common\modules\yop\sdk\Util;
  9. use app\common\modules\yop\sdk\Util\HttpUtils;
  10. abstract class HttpRequest{
  11. /**
  12. * @param $url 请求地址
  13. * @param $post 请求参数
  14. * @param int $timeout 超时时间
  15. * @param bool $json 返回是否json化
  16. * @param bool $Multipart
  17. * @param null $headers 头部信息
  18. * @return mixed|string
  19. */
  20. static public function curl_request($url,$post, $timeout=120, $json=false, $Multipart =false,$headers=null){
  21. $curl = curl_init();
  22. curl_setopt($curl, CURLOPT_URL, $url);
  23. curl_setopt($curl, CURLOPT_USERAGENT, 'YOP_PHP_Client_API');
  24. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  25. curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
  26. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  27. if($headers!=null) {
  28. $headerArray=array();
  29. foreach ($headers as $key => $value) {
  30. array_push($headerArray,$key.":".$value);
  31. }
  32. curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
  33. }
  34. if($post) {
  35. curl_setopt($curl, CURLOPT_POST, 1);
  36. curl_setopt($curl, CURLOPT_POSTFIELDS, is_array($post)?http_build_query($post):$post);
  37. }
  38. if($Multipart){
  39. curl_setopt ($curl, CURLOPT_SAFE_UPLOAD, false);
  40. curl_setopt($curl, CURLOPT_POST, 1);
  41. $file_name = str_replace("%2F", "/",$post["_file"]);
  42. // 从php5.5开始,反对使用"@"前缀方式上传,可以使用CURLFile替代;
  43. // 据说php5.6开始移除了"@"前缀上传的方式
  44. if (class_exists('CURLFile')) {
  45. $file = new \CURLFile($file_name);
  46. // 禁用"@"上传方法,这样就可以安全的传输"@"开头的参数值
  47. curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
  48. } else {
  49. $file = "@{$file_name}";
  50. }
  51. $fields = $post;
  52. //$fields ['_file'] = $file;
  53. unset($fields['_file']);
  54. $fields ['merQual'] = $file;
  55. curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
  56. }
  57. $TLS = substr($url, 0, 8) == "https://" ? true : false;
  58. if($TLS) {
  59. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
  60. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
  61. }
  62. //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  63. curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
  64. $data = curl_exec($curl);
  65. if (curl_errno($curl)) {
  66. return curl_error($curl);
  67. }
  68. curl_close($curl);
  69. if ($json){
  70. return json_decode($data,true);
  71. }
  72. return $data;
  73. }
  74. }