平常使用fiddler抓包时,并不能抓取PHP程序中执行的远程获取函数的数据包,这是因为fiddler里默认设置的都是抓取8888端口的数据包,见下图fiddler设置:

php怎么用fiddler对程序中的curl,file_get_contents抓取函数抓包

    那如果要查看排查程序中使用的curl的get和post方法,以及使用file_get_contents方法获取数据时的数据包怎么实现呢?其实也很简单。

    curl里面有一项设置:CURLOPT_PROXY,即设置代理的地址,既然curl抓取8888端口的数据包,那curl执行get和post时通过8888端口代理的话,就能抓取到数据了。只要在curl_init()初始化之后,执行:

$ch = curl_init();

curl_setopt($ch, CURLOPT_PROXY,'127.0.0.1:8888');

    就能抓取到curl时的get和post数据包了。

    file_get_contents方法也是一样,不过一般我们很少使用代理,而且估计大部分使用这个方法的时候很少用其它的参数,一般传入一个url参数就完事了。不过file_get_contents其它参数还真有不少,要实现file_get_contens抓包,方法如下:

$url = "http://www.04007.cn"; 
$ctx = stream_context_create(array( 
    'http' => array(

        'timeout' => 5, 
        'proxy' => '127.0.0.1:8888', //在这里输入代理的地址
        'request_fulluri' => True,) 
    ) 
); 
$result = file_get_contents($url, False, $ctx); 
echo $result;

是不是看上去没有问题了?那就试一下吧,结果呢,是下面这个样子:

 

php怎么用fiddler对程序中的curl,file_get_contents抓取函数抓包

posted on 2018-11-02 22:56  归海一刀  阅读(180)  评论(0)    收藏  举报