最近在开发中有用到php的curl库来传递和接收http消息,因为并不擅长php,所以走了很多弯路,在这里归纳一下,如有错误,欢迎指正
1.HTTP会话的结构##
Method URL Version
Hearder
Data
2.用到的相关函数含义##
$ch = curl_init(); //初始化一个curl会话
curl_setopt(); //设置curl传输选项
curl_setopt($ch, CURLOPT_URL, $url); //设置抓取的url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出
3.封装Header数据和Data数据并进行传送##
(1) Header封装
$accessToken = "+++++++";
$app_key = "+++++++";
$header = array("Content-Type: application/json","Authorization: bearer $accessToken","app_key: $app_key");
curl_setopt($ch,CURLOPT_HTTPHEADER,$header); //为url添加hearder
(2) Data封装
4.php接收不同格式的post消息##
(1) 如果接收的消息为Content-type:application/x-www-form-urlencoded类型
$post_data = $_POST; //$post_data为数组,可直接取元素的值,如$post_data['id']
(2) 如果接收的消息为Content-type:application/json类型
$raw_post_data = file_get_contents("php://input"); //&raw_post_data为json格式,需要用json_decode函数处理
$raw_post_data = json_decode($raw_post_data,true); //处理后$raw_post_data为数组,可以直接取元素的值
注意:
如果要将接收的数据写入txt文件中,需转化为是json格式的数据,则 1 中的$post_data需用json_encode处理,2中的$raw_post_data不需要用json_decode处理
$post_data=json_encode($post_data); //转成json格式
file = fopen("test.txt","w"); //打开txt文件
$fwrite($file,$post_data); //将数据写入文件
5.附上代码##
(1)post方式:
"++++++++++++++++", "secret" => "++++++++++++++++" ); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); $output = curl_exec($ch); if (curl_errno($ch)) { echo 'Errno'.curl_error($ch); } curl_close($ch); print_r($output); ?>
(2)get方式:"$deviceId", "gatewayId" => "$deviceId" ); $data = http_build_query($data); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_URL, $url.$data); $output = curl_exec($ch); if (curl_errno($ch)) { echo 'Errno'.curl_error($ch); } curl_close($ch); print_r($output); ?>