php使用curl请求和json,xml,yaml解析,二进制传输数据

JSON:

//控制器的方法 验证接收请求,返回json字符串
/**
 * @return string
 */
public function ttt_json(){
        $result = array("method" => null);
        if($_SERVER['REQUEST_METHOD'] == 'GET' ? true : false){
            $result = array("method" => "GET","data" => $_GET['data']);
        }
        if($_SERVER['REQUEST_METHOD'] == 'POST' ? true : false){
            $result = array("method" => "POST","data" => $_POST['data']);
        }
        if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
            // ajax 请求的处理方式
            $result = array("method" => "AJAX");
        }
        return json_encode($result);
}
//主动发送get请求,并返回json
function getJson($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    //json_decode($output, true);
    return $output;
}
//主动发送post请求,并返回json
function postJson($url,$array=[]){
    $curl = curl_init();
    //设置提交的url
    curl_setopt($curl, CURLOPT_URL, $url);
    //设置头文件的信息作为数据流输出
    curl_setopt($curl, CURLOPT_HEADER, 0);
    //设置获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //设置post方式提交
    curl_setopt($curl, CURLOPT_POST, 1);
    //设置post数据
    $post_data = $array;
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    //执行命令
    $data = curl_exec($curl);
    //关闭URL请求
    curl_close($curl);
   //获得数据并返回
    //json_decode($data, true);
    return $data;
}
//请求控制器的方法
var_dump(getJson("http://www.***.com/index.php/test/temp/ttt_json?data=nihao"));
var_dump(postJson("http://www.***.com/index.php/test/temp/ttt_json",["data"=>"nihao"]));

XML:

//控制器的方法 验证接收请求,返回json字符串
//接收xml的数据
    function input_xml_json(){
        //接收传送的数据
        $xmldata = file_get_contents("php://input");
//        $this->log("xml.txt",$xmldata);
        //转换为simplexml对象
        $xmlResult = simplexml_load_string($xmldata);
        //XML转成JSON格式
//        $json = json_encode($xmlResult);
        return json_encode($xmlResult);
    }
    function log($file,$txt){
        $fp =  fopen($file,'ab+');
        fwrite($fp,'-----------'.date('Y-m-d H:i:s').'-----------------'."\n");
        fwrite($fp,$txt);
        fwrite($fp,"\r\n\r\n\r\n");
        fclose($fp);
    }
//主动发送xml并返回json
function getxml($url,$xml){
    $post_url = $url;//目的url
    $post_str = $xml;
    $timeout = 10;//连接/响应超时设置,单位秒s
    $ch = curl_init();//初始化curl
    $header[] = "Content-type: text/xml";//设置http报文头text/xml
    curl_setopt($ch, CURLOPT_URL, $post_url);//设置目的URL
    curl_setopt($ch, CURLOPT_POST, 1);//1:post方式 0:get方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);//设置将要发送的数据
    curl_setopt($ch, CURLOPT_HEADER, 0);//1:显示 0:不显示
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);//响应超时
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);//连接超时
    $data = curl_exec($ch);//执行发送
    curl_close($ch);
    //json_decode($data, true);
    return $data;
}
$xml="
        
            1
            Google Maps
            1.0
        
        
            2
            Chrome
            2.1
        
        
            3
            Google Play
            2.3
        
   ";
var_dump(getxml("http://www.xxx.com/index.php/test/temp/input_xml_json",trim($xml)));

yaml: 两种方式
1、使用pecl的yaml扩展,https://pecl.php.net/package/yaml ,需要编译安装,稍显麻烦,但是性能比第二种好一些。

2、使用composer包symfony/yaml,安装只需要 composer require symfony/yaml ,都是php写的,直接安装即可。

1:

选择最新扩展,下载正在使用php版本,将php_yaml.dll 扩展放到php的ext下
重启,-》php -m
在这里插入图片描述
php-yaml的使用:

function get_yaml_json2(){
    try {
        /**1: yaml内容*/
        // $str_yaml = 'database:
        //                 host: 127.0.0.1
        //                 user: root
        //                 dbname: test
        //                 pwd: 123456';
        // $data = yaml_parse($str_yaml);    //将YAML解析为PHP值。
        /**2: php内容数组*/
        // $arr = [
        //     'database' => [
        //         'host'   => '127.0.0.1',
        //         'user'   => 'root',
        //         'dbname' => 'test',
        //         'pwd'    => '123456',
        //     ],
        // ];
        // $yaml = yaml_emit($arr);       //将PHP值转储到YAML字符串。
        // // file_put_contents('./db.yaml', $yaml); //写进文件
        // $data = yaml_parse($yaml);    //将YAML解析为PHP值。

        /**3: yaml内容文件*/
        $data = yaml_parse_file('./db.yaml');
    } catch (ParseException $e) {
        echo $e->getMessage(); //
    }
    return json_encode($data, true);
}
var_dump(get_yaml_json2());

2:

composer require symfony/yaml

命令下后会有vendor文件

require_once __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;
function get_yaml_json(){
    try {
        /**1: yaml内容*/
        $str_yaml = 'database:
                        host: 127.0.0.1
                        user: root
                        dbname: test
                        pwd: 123456';
        $data = Yaml::parse($str_yaml);    //将YAML解析为PHP值。

        /**2: php内容数组*/
        // $arr = [
        //     'database' => [
        //         'host'   => '127.0.0.1',
        //         'user'   => 'root',
        //         'dbname' => 'test',
        //         'pwd'    => '123456',
        //     ],
        // ];
        // $yaml = Yaml::dump($arr);       //将PHP值转储到YAML字符串。
        // // file_put_contents('./db.yaml', $yaml); //写进文件
        // $data = Yaml::parse($yaml);    //将YAML解析为PHP值。

        /**3: yaml内容文件*/
        // $data = Yaml::parseFile('./db.yaml');
    } catch (ParseException $e) {
        echo $e->getMessage(); //
    }
    return json_encode($data, true);
}
var_dump(get_yaml_json());

二进制传输数据

//json字符串
$str = '{"code": 1,"msg": "ok","time": "1637998234","data": {"is_tc": 1,"advertisement": [{"id": 5,"content": "书(拼音:shū),是汉语通用规范一级字 [1]  。最早见于甲骨文 [2]  。本义作动词,是书写、记述的意思;后引申为名词,指简册、典籍、文书、信函等。","type": "1","status": "1","start_time": 1637745813,"end_time": 1638000208,"weigh": 2}]}}';
/**
* 将字符串转换成二进制
* @param type $str
* @return type
*/
function StrToBin($str){
    //1.列出每个字符
    $arr = preg_split('/(?, $str);
    //2.unpack字符
    foreach($arr as &$v){
        $temp = unpack('H*', $v);
        $v = base_convert($temp[1], 16, 2);
        unset($temp);
    }
 
    return join(' ',$arr);
}
$binary = StrToBin($str);   //二进制
/**
* 二进制转换成字符串
* @param type $str
* @return type
*/
function BinToStr($str){
    $arr = explode(' ', $str);
    foreach($arr as &$v){
        $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
    }
    return join('', $arr);
}
var_dump(json_decode(BinToStr($binary),true));

你可能感兴趣的:(PHP,php)