zoukankan      html  css  js  c++  java
  • php中curl库相关操作

    最近在开发中有用到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);   //设置获取的信息以文件流的形式返回,而不是直接输出

    下面6行为一组 $cacert = "/path/to/client.crt"; $key = "/path/to/client.key"; curl_setopt($ch, CURLOPT_SSLCERT, $cacert);   //指定客户端证书,用于https curl_setopt($ch, CURLOPT_SSLKEY, $key);   //指定客户端秘钥 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   //与下一句合用,绕过ssl验证 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_HTTPGET, true);   //设置传输方式为get,其实默认也为get,可以在方式改变的时候设置 curl_setopt($ch, CURLOPT_POST, 1);   //设置传输方式为post curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));   //用post方式传输Body内容为data的消息,get类似 $output = curl_exec($ch);   //执行curl会话,获得返回的结果 curl_errno($ch);   //返回一个包含当前会话错误信息的字符串 curl_close($ch);   //关闭curl请求 print_r($output);   //打印获取的数据

    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封装

    如果Hearder的Content-type:application/x-www-form-urlencoded,则Data如下封装 $data = Array ("deviceId" => "$deviceId", "gatewayId" => "$deviceId"); $data = http_build_query($data);     //Data需要经过该函数处理 curl_setopt($ch, CURLOPT_URL, $url.$data);   //http用get方式传送带data的url curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //http用post方式传送带data的url
    如果Hearder的Content-type:application/json,则Data如下封装 $data = '{"notifyType":"deviceAdded","callbackurl":"https://192.168.1.1:443/test/a.php"}' ;   //Data不需要函数处理 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //http用post方式传送json格式data的url

    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);
    ?>
    
  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/yf4695/p/8999829.html
Copyright © 2011-2022 走看看