• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • 使用curl工具调试https接口

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2022年05月12日 22:53:41
  • 所属分类:PHP+MySql, PHP原生源码
  • 阅读次数:1013次阅读
  • 标签:
  • 工作中需要对接调试http接口,之前都是写代码测试,发现直接用curl这个工具更简单高效。

    举例如下:

    想要post一包数据给这个接口https://XXXXXXXXX

    http报文头规定如下:

    POST / HTTP/1.1
    Host: XXXXXXXXXX:XXXX
    Accept: */*
    User-Agent: Donjin Http 0.1
    Content-Type: x-ISO-TPDU/x-auth
     Cache-Control: no-cache
    Content-Length: 93
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(hex data)

    用curl测试:其中需要提交的二进制数据,为了方便,写到aaa.bin文件中了。

     curl https://XXXXXXXXX -v --cacert ./UP.pem -k -H 'User-Agent: Donjin Http 0.1' \
     -H 'Content-Type: x-ISO-TPDU/x-auth' -H 'Cache-Control: no-cache' -H 'Content-Length: 93' --data-binary @aaa.bin

    相比之前,用php写了个测试demo来说,这个工具更简单高效。

    之前的php demo如下:

    <?php
     
    echo "hello test 111!";
    echo "<br>";
    /* PHP CURL HTTPS POST */
    function curl_post_https($url,$data){ // 模拟提交数据函数
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            echo 'Errno'.curl_error($curl);//捕抓异常
        }
        curl_close($curl); // 关闭CURL会话
        return $tmpInfo; // 返回数据,json格式
    }
    //echo getcwd();
    /**
     * @name ssl Curl Post数据
     * @param string $url 接收数据的api
     * @param string $vars 提交的数据
     * @param int $second 要求程序必须在$second秒内完成,负责到$second秒后放到后台执行
     * @return string or boolean 成功且对方有返回值则返回
     */
    function curl_post_ssl($url, $data, $second=30,$aHeader=array())
    {
    	$ch = curl_init();
    	curl_setopt($ch,CURLOPT_VERBOSE,'1');
    	  
    	curl_setopt($ch,CURLOPT_TIMEOUT,$second);
    	//curl_setopt($ch,CURLOPT_VERBOSE, '1'); //debug模式,方便出错调试  
    	curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt($ch,CURLOPT_URL,$url);
    	curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    	curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    	//curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
    	//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert/CUP_cacert.pem');
       // curl_setopt($ch,CURLOPT_SSLCERTPASSWD,'');
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    	curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/cert/CUP_cacert.pem');
     
    	
    	//设置header信息
    	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    	           'User-Agent: Donjin Http 0.1',
    			   'Content-Type: x-ISO-TPDU/x-auth',
                   'Cache-Control: no-cache',
                   'Content-Length: ' . strlen($data))
          );
    	  
    	if( count($aHeader) >= 1 ){
    			curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    	}
     
    	curl_setopt($ch,CURLOPT_POST, 1);
    	curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    	$data = curl_exec($ch);
    	//$curlInfo = curl_getinfo($ch);
    	//echo $curlInfo;
    	 if (curl_errno($ch)) {
            echo 'Errno'.curl_error($ch);//捕抓异常
        }
    	curl_close($ch);
    	if($data)
    		return $data;
    	else   
    		return false;
    }
     
    /*
    $data = [0,1];
    $aHeader =[];
    $rcode = curl_post_ssl($url,$data,10,$aHeader);
    if($rcode)
    {
    	echo "ok"!
    }
    else
    {
    	echo "error"!
    }
    */
     
    function hex2bin($h){
    	if (!is_string($h)) return null;
    		$r='';
    		for ($a=0; $a<strlen($h); $a+=2) 
    		{ $r.=chr(hexdec($h{$a}.$h{($a+1)})); }
    		return $r;
    }
     
    function Hex2String($hex){
        $string='';
        for ($i=0; $i < strlen($hex)-1; $i+=2){
            $string .= chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return $string;
    }
    function hextostr($hex)  
    {  
        return preg_replace_callback('/\\\x([0-9a-fA-F]{2})/', function($matches) {  
            return chr(hexdec($matches[1]));  
        }, $hex);  
    }  
    $string = "005BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0303135393838303231303031303231303136300011000000010030002953657175656e6365204e6f3136333135305358582d34433330343131390003303120";  
    $data = hex2bin($string);
    #var_dump($data);  
     
    $url = 'https://XXXXXXXXXXXXXXXXX';
    $aHeader = array();
     
    $rcode = curl_post_ssl($url,$data,10,$aHeader);
    //$rcode = curl_post_https($url,$data);
    if($rcode)
    {
    	echo "ok";
    	echo "<br>";
    	echo $rcode;
    	//$myStr="";  
    	//for($i=0;isset($rcode[$i]);$i++)  
    	//{  
    	//	$myStr.= chr($rcode[$i]);  
    	//}  
    	//var_dump($myStr);
    	//$res=json_decode($rcode,true);
    	echo "<br>";
    	echo 'respond hex data:';
    	echo "<br>";
    	$arr1 = str_split($rcode, 1);  
    	foreach($arr1 as $akey=>$aval){  
    		$arr1[$akey]=" ".bin2hex($aval);
            echo $arr1[$akey];		
    	}  
    	//var_dump($arr1);  
        //echo hextostr($rcode);	
    	//var_dump($rcode);
    	//echo Hex2String($rcode);
    	//implode('!', $rcode);
    }
    else
    {
    	echo "error";
    	echo "<br>";
    }

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!