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协议请求数据的。

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

  • 相关阅读:
    POJ 1011Sticks
    zz 深入浅出CGlib打造无入侵的类代理
    教你如何用SQL备份和还原数据库
    sql server 2008 评估期已过期解决办法
    C# 第三方分页控件的使用
    Listbox移除
    Winwos server2008 IE安全级别设置
    验证手机号码和固定电话正则表达式
    SQL 左外连接,右外连接,全连接,内连接 4种连接的区别
    SQL TOP 和 DISTINCT 结合使用
  • 原文地址:https://www.cnblogs.com/phpdragon/p/2861674.html
Copyright © 2011-2022 走看看