zoukankan      html  css  js  c++  java
  • web跨系统开发,http请求跟踪工具Fidder

    今天开发,郁闷至极。

    discuz门户需要调用另一个系统的数据用于展示。
    首先想到的是利用PHP的soap扩展进行数据通讯。
    不过熟悉了Discuz的PHPer会发现,discuz 已经支持了调用第三方模块数据功能。

    参考discuz开发文档:dev.discuz.org/wiki/index.php


    琢磨了半天,使用它的官方示例。添加第三方模块成功。
    但死活半天没有出来数据,郁闷至极,于是一脑门的去看discuz前台是怎么调用的。
    花费了半天的时间,看呀看的,诶!
    最后老大过来一瞧,把下面的代码一看,诶,
    坑爹啊!

    就是个IF 条件的问题,
    搞半天,看那么多代码,问题却出在了服务器端,无语。

    if($_POST['op'] == 'getdata') { //判断是否为请求数据列表
        $datalist = $data = array();//数据列表
        $wherearr = array(); //SQL 条件数组

    通讯使用的是如下discuz函数:

    View Code
    function _dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
        $return = '';
        $matches = parse_url($url);
        $scheme = $matches['scheme'];
        $host = $matches['host'];
        $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
        $port = !empty($matches['port']) ? $matches['port'] : 80;
    
        if($post) {
            $out = "POST $path HTTP/1.0\r\n";
            $header = "Accept: */*\r\n";
            $header .= "Accept-Language: zh-cn\r\n";
            $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
            $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
            $header .= "Host: $host\r\n";
            $header .= 'Content-Length: '.strlen($post)."\r\n";
            $header .= "Connection: Close\r\n";
            $header .= "Cache-Control: no-cache\r\n";
            $header .= "Cookie: $cookie\r\n\r\n";
            $out .= $header.$post;
        } else {
            $out = "GET $path HTTP/1.0\r\n";
            $header = "Accept: */*\r\n";
            $header .= "Accept-Language: zh-cn\r\n";
            $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
            $header .= "Host: $host\r\n";
            $header .= "Connection: Close\r\n";
            $header .= "Cookie: $cookie\r\n\r\n";
            $out .= $header;
        }
    
        $fpflag = 0;
        if(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) {
            $context = array(
                'http' => array(
                    'method' => $post ? 'POST' : 'GET',
                    'header' => $header,
                    'content' => $post,
                    'timeout' => $timeout,
                ),
            );
            $context = stream_context_create($context);
            $fp = @fopen($scheme.'://'.($ip ? $ip : $host).':'.$port.$path, 'b', false, $context);
            $fpflag = 1;
        }
    
        if(!$fp) {
            return '';
        } else {
            stream_set_blocking($fp, $block);
            stream_set_timeout($fp, $timeout);
            @fwrite($fp, $out);
            $status = stream_get_meta_data($fp);
            if(!$status['timed_out']) {
                while (!feof($fp) && !$fpflag) {
                    if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {
                        break;
                    }
                }
    
                $stop = false;
                while(!feof($fp) && !$stop) {
                    $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
                    $return .= $data;
                    if($limit) {
                        $limit -= strlen($data);
                        $stop = $limit <= 0;
                    }
                }
            }
            @fclose($fp);
            return $return;
        }
    }

    默认使用的GET传递。


    老大一过来,就说,跨系统开发,进行响应请求处理,
    光看代码是很费时间的,需要利用好工具进行开发,缩短排错时间。
    便推荐了一款软件,很好使用!


    它可以跟踪客户端的每一次HTPP请求数据。

    对与需要跨系统调用,或隐式传递数据的跟踪是很方便的。
    能及时发现问题的所在。

    但可惜的是本次开发的任务,discuz 获取远程数据是通过socket 的,

    也就是基于tcp/ip协议请求数据的。

    那个就得安装一个防火墙或抓包工具才能获取到了。

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    129. Sum Root to Leaf Numbers
    117. Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/phpdragon/p/2861674.html
Copyright © 2011-2022 走看看