HttpUtil.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace addons\JoinPay\common\logic\util;
  3. /**
  4. * http工具类
  5. * Class HttpUtil
  6. * @package utils
  7. */
  8. class HttpUtil {
  9. //private static $_CAINFO = __DIR__ . "/ca/cacert.pem";//证书存放目录
  10. private static $_CAINFO = "";//证书存放目录
  11. /**
  12. * 以post方式发起http请求,请求参数为json格式
  13. * @param string $url
  14. * @param string $jsonData
  15. * @return bool|string
  16. */
  17. public static function postJsonSync(string $url, string $jsonData){
  18. $curl = curl_init();
  19. $headers=[];
  20. $headers[] = "Content-type: application/json;charset=UTF-8";//设置请求体类型
  21. $headers[] = 'Accept: application/json;charset=UTF-8';//设置预期响应类型
  22. $headers[] = 'Expect:';//禁用"Expect"头域
  23. $opts = [];
  24. $opts[CURLOPT_URL] = $url;//设置请求的url
  25. $opts[CURLOPT_POST] = 1;//设置post方式提交
  26. $opts[CURLOPT_RETURNTRANSFER] = true;//设置获取的信息以文件流的形式返回,而不是直接输出。
  27. $opts[CURLOPT_CONNECTTIMEOUT] = 5;//设置连接超时时间(秒)
  28. $opts[CURLOPT_TIMEOUT] = 20;//设置超时时间(秒)
  29. $opts[CURLOPT_HTTPHEADER] = $headers;//设置请求头
  30. $opts[CURLOPT_POSTFIELDS] = $jsonData;//设置需要提交的数据
  31. $opts[CURLOPT_HTTP_VERSION] = 3;
  32. $opts[CURLOPT_HEADER] = false;//头文件的信息不当做数据流输出
  33. if(strpos($url, "https") === 0){//https请求
  34. $opts[CURLOPT_SSL_VERIFYHOST] = 2;// 从证书中检查SSL加密算法是否存在
  35. if(static::$_CAINFO){
  36. $opts[CURLOPT_CAINFO] = static::$_CAINFO; //设置证书路径
  37. $opts[CURLOPT_SSL_VERIFYPEER] = true; //需要执行证书检查
  38. }else{
  39. $opts[CURLOPT_SSL_VERIFYPEER] = false; //跳过证书检查(不建议)
  40. }
  41. }
  42. curl_setopt_array($curl, $opts);
  43. //执行命令
  44. $data = curl_exec($curl);
  45. curl_close($curl);
  46. return $data;
  47. }
  48. }