• 技术文章 >后端开发 >PHP问题

    php如何使用curl设置header头传参

    藏色散人藏色散人2020-07-28 11:03:06原创6107

    php curl设置header的方法:首先初始化浏览器;然后设置浏览器,并把参数url传到浏览器的设置当中;接着以字符串形式返回到浏览器当中,并判断data是否有数据;最后通过“curl_setopt”方法设置header头即可。

    推荐:《PHP教程

    PHP使用CURL设置header头传参以及设置Content-Type: application/json类型的后台数据接收

    CURL函数

    public function CurlRequest($url,$data=null,$header=null){
      //初始化浏览器
      $ch = curl_init();
      //设置浏览器,把参数url传到浏览器的设置当中
      curl_setopt($ch, CURLOPT_URL, $url);
      //以字符串形式返回到浏览器当中
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      //禁止https协议验证域名,0就是禁止验证域名且兼容php5.6
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
      //禁止https协议验证ssl安全认证证书
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      //判断data是否有数据,如果有data数据传入那么就把curl的请求方式设置为POST请求方式
      if ( !empty($data) ) {
        //设置POST请求方式
        @curl_setopt($ch, CURLOPT_POST, true);
        //设置POST的数据包
        @curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      }
      //设置header头
      if ( !empty($header) ) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      }
      //让curl发起请求
      $str = curl_exec($ch);
      //关闭curl浏览器
      curl_close($ch);
      //把请求回来的数据返回
      return $str;
    }

    函数调用

    $url = "http://desk.yunindex.cn/test";
    $jsonArr = [
      'accountid' => '34',
      'option' => 'chat_index',
    ];
    $jsonStr = json_encode($jsonArr);  //设置了Content-Type: application/json,传参要转化为JSON,否则后台接收不到数据
    //header头设置
    $headers = array(
      "Content-Type: application/json",
      "Content-Length: " . strlen($jsonStr) . "",
      "Accept: application/json",
      "client-id:5K8264ILTKCH16CQ2502SI8ZNMTM67VS",    //自定义参数
      "client-secret:C380BEC2BFD727A4B6845133519F3AD6"  //自定义参数
    );
    $data = $this->CurlRequest($url,$jsonStr,$headers);

    后台接受

    json_encode($_SERVER)  

    使用$_SERVER能接收到header头的信息,在header头里面设置的自定义参数会在这里面体现

    结果

    {
    "USER": "www",
    "HOME": "\/home\/www",
    "HTTP_CLIENT_SECRET": "C380BEC2BFD727A4B6845133519F3AD6",       //这是自定义的参数,跟上面传的参数相对于,会自动转化为大写跟下划线
    "HTTP_CLIENT_ID": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",          //这是自定义的参数,跟上面传的参数相对于,会自动转化为大写跟下划线
    "HTTP_ACCEPT": "application\/json",  
    "HTTP_CONTENT_LENGTH": "40",
    "HTTP_CONTENT_TYPE": "application\/json",
    "HTTP_HOST": "desk.yunindex.cn",
    "SCRIPT_FILENAME": "\/workspace\/php\/index_desk\/htdocs\/index.php",
    "REDIRECT_STATUS": "200",
    "SERVER_NAME": "desk.yunindex.cn",
    "SERVER_PORT": "80",
    "SERVER_ADDR": "192.168.1.90",
    "REMOTE_PORT": "64524",
    "REMOTE_ADDR": "192.168.1.113",
    "SERVER_SOFTWARE": "nginx\/1.15.2",
    "GATEWAY_INTERFACE": "CGI\/1.1",
    "REQUEST_SCHEME": "http",
    "SERVER_PROTOCOL": "HTTP\/1.1",
    "DOCUMENT_ROOT": "\/workspace\/php\/index_desk\/htdocs",
    "DOCUMENT_URI": "\/index.php",
    "REQUEST_URI": "\/test",
    "SCRIPT_NAME": "\/index.php",
    "CONTENT_LENGTH": "40",
    "CONTENT_TYPE": "application\/json",
    "REQUEST_METHOD": "POST",
    "QUERY_STRING": "",
    "FCGI_ROLE": "RESPONDER",
    "PHP_SELF": "\/index.php",
    "REQUEST_TIME_FLOAT": 1557025085.410574,
    "REQUEST_TIME": 1557025085
    }

    这里有一个问题,如果使用的是nginx的话,header头里的参数如果有下划线(如:client_secret),使用$_SERVER貌似会接收不到该参数,需要配置nginx.conf,在里面添加 underscores_in_headers on; 配置

    file_get_contents('php://input')

    接收参数,以流的形式接收

    结果

    string(40) "{"accountid":"34","option":"chat_index"}"

    以上就是php如何使用curl设置header头传参的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:curl header php
    上一篇:php如何关闭gzip 下一篇:如何解决apache php配置报错问题
    大前端线上培训班

    相关文章推荐

    • php下curl用法是什么?• PHP不支持curl如何解决?• PHP中curl如何设置header?• 如何进行php curl超时设置

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网