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"}"

原文地址:https://www.cnblogs.com/luoqinghui/p/10812289.html

时间: 2024-10-06 04:18:35

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

action之间传参为中文;type='redirect'和 type='redirectAction'主要区别

摘录自:http://blog.csdn.net/lhi705/article/details/7446156 [html] view plain copy print? Struts2中action之间传参中文乱码的问题 解决方法一(已经验证,可以): 两个action都定义要传的参数属性的get和set方法,必须相同! 在struts.xml中定义: <result name="input" type="redirect"> <param na

Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)

在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示:部门和子部门. 1.部门包括北京销售部.郑州销售部(此处为小的模拟例子,具体项目实施中可以根据相应字段选取): 2.子部门包括北京销售1部.北京销售2部.郑州销售1组.郑州销售2组: 3.当部门的值为北京销售部时,子部门的值列表范围为:北京销售1部.北京销售2部:郑州销售部同理. (已满足,并且:

Curl发送header头信息

有些接口用CURL调用的时候,要发送header头信息 如百度的查询快递的接口 PHP代码如下: $url = "https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?appid=4001&com={$type}&nu={$deliveryBn}";         $headers = array(         "Host: sp0.baidu.com"

接口开发注意传参问题

1 接口开发注意传参问题: 2 3 php中的curl()函数进行post请求的时候,传递数据的格式可以有以下几种方式: 4 5 (1):由参数拼接而成的key=>value键值对字符串.形如以下: name=xxx&age=23$sex=1 6 7 这种请求参数默认是按照application/x-www-form-urlencoded进行编码的. 8 9 (2):由参数组成的key=>value键值对数组(只能是一维数组,更高维度的数组会报错). 10 11 形如以下格式: 12

echarts html传参+js请求+ashx服务 代码方式

html 头传参方式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="/Scri

手动访问和传参

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <div> <router-link to="/">首页</ro

scrapy框架的日志等级和请求传参, 优化效率

目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 日志信息的种类: ERROR : 一般错误 WARNING : 警告 INFO : 一般的信息 DEBUG : 调试信息 设置日志信息指定输出: 在settings.py配置文件中,加

vue router 如何使用params query传参,以及有什么区别

写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家. 本文首发于我的个人blog:obkoro1.com Vue router如何传参 params.query是什么? params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params query:/route

JSP页面传参

1.利用javabean Javabean类: package entity; public class User { private String username=""; private String gender=""; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } p