Home  >  Article  >  php教程  >  PHP中使用CURL请求页面,使用fiddler进行抓包

PHP中使用CURL请求页面,使用fiddler进行抓包

WBOY
WBOYOriginal
2016-07-11 20:00:424197browse

在PHP中使用CURL访问页面:

<?php

$ch = curl_init('http://www.baidu.com'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
echo $output;
?>

 可以显示页面,并且可以使用curl_getinfo函数获取请求头。

但不能直观的查看,而且无法使用Fiddler进行抓包。

经过搜索后终于找到解决办法:

Fiddler的抓包方式:打开Fiddler后,自动设置浏览器代理到127.0.0.1:8888。

所有浏览的网页均通过该端口进行转发,固可以抓包。

修改PHP代码:

<?php

$ch = curl_init('http://www.baidu.com'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);//若PHP编译时不带openssl则需要此行 
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
echo $output;
?>

 发现返回:

HTTP/1.1 504 Fiddler - Receive Failure <span style="color: #008080;">Date</span>: Tue, 08 Oct 2013 15:22:50 GMT Content-Type: text/html; charset=UTF-8 Connection: close Timestamp: 23:22:50.647 [Fiddler] ReadResponse() failed: The server did not <span style="color: #0000ff;">return</span> a response <span style="color: #0000ff;">for</span> this request.Server returned 0 bytes. 

抓包信息为:

上行

GET http:<span style="color: #008000;">//</span><span style="color: #008000;">www.baidu.com HTTP/1.1</span>
Host: www.baidu.<span style="color: #000000;">com
Accept</span>: *<span style="color: #008000;">/*</span><span style="color: #008000;">
Connection: Keep-Alive</span>

下行

HTTP/1.1 504 Fiddler -<span style="color: #000000;"> Receive Failure
</span><span style="color: #008080;">Date</span>: Tue, 08 Oct 2013 15:22:50<span style="color: #000000;"> GMT
Content</span>-Type: text/html; charset=UTF-8<span style="color: #000000;">
Connection</span>:<span style="color: #000000;"> close
Timestamp</span>: 23:22:50.647<span style="color: #000000;">

[Fiddler] ReadResponse() failed</span>: The server did not <span style="color: #0000ff;">return</span> a response <span style="color: #0000ff;">for</span> this request.Server returned 0 bytes.                                                                                                                                                                                                                                                                                                                                                                                                                 

经过分析后发现,请求域名,必须以“/”结尾。

更改后代码

<span style="color: #000000;">php

</span><span style="color: #800080;">$ch</span> = curl_init('<span style="color: #ff0000;">http://www.baidu.com/</span>'<span style="color: #000000;">); 
curl_setopt(</span><span style="color: #800080;">$ch</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: #000000;">);
curl_setopt(</span><span style="color: #800080;">$ch</span>, CURLOPT_HEADER, 1<span style="color: #000000;">);

curl_setopt(</span><span style="color: #800080;">$ch</span>,CURLOPT_PROXY,'127.0.0.1:8888');<span style="color: #008000;">//</span><span style="color: #008000;">设置代理服务器 </span>
curl_setopt(<span style="color: #800080;">$ch</span>,CURLOPT_SSL_VERIFYPEER,0);<span style="color: #008000;">//</span><span style="color: #008000;">若PHP编译时不带openssl则需要此行 
// 3. 执行并获取HTML文档内容</span>
<span style="color: #800080;">$output</span> = curl_exec(<span style="color: #800080;">$ch</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 4. 释放curl句柄</span>
curl_close(<span style="color: #800080;">$ch</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$output</span><span style="color: #000000;">;
</span>?>

效果:

Fiddler:

上行:

GET http:<span style="color: #008000;">//</span><span style="color: #008000;">www.baidu.com/ HTTP/1.1</span>
Host: www.baidu.<span style="color: #000000;">com
Accept</span>: *<span style="color: #008000;">/*</span><span style="color: #008000;">
Connection: Keep-Alive</span>

 

下行:

HTTP/1.1 200<span style="color: #000000;"> OK
</span><span style="color: #008080;">Date</span>: Tue, 08 Oct 2013 15:51:19<span style="color: #000000;"> GMT
Server</span>: BWS/1.0<span style="color: #000000;">
Content</span>-Length: 11002<span style="color: #000000;">
Content</span>-Type: text/html;charset=utf-8<span style="color: #000000;">
Cache</span>-Control: <span style="color: #0000ff;">private</span><span style="color: #000000;">
BDPAGETYPE</span>: 1<span style="color: #000000;">
BDUSERID</span>: 0<span style="color: #000000;">
BDQID</span>: 0x84be7be11e5c433f<span style="color: #000000;">
Set</span>-Cookie: BDSVRTM=1; path=/<span style="color: #000000;">
Set</span>-Cookie: H_PS_PSSID=3409_3381_2777_1426_2975_2980_3501; path=/; domain=.baidu.<span style="color: #000000;">com
Set</span>-Cookie: BAIDUID=68722482960D705B97CAF69731DF6C19:FG=1; expires=Tue, 08-Oct-43 15:51:19 GMT; path=/; domain=.baidu.<span style="color: #000000;">com
Expires</span>: Tue, 08 Oct 2013 15:51:19<span style="color: #000000;"> GMT
P3P</span>: CP=" OTI DSP COR IVA OUR IND COM "<span style="color: #000000;">
Connection</span>: Keep-<span style="color: #000000;">Alive

</span><!--STATUS OK--><meta ...>

 

Web:

 

 

 

 

$ch = curl_init('https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);//若PHP编译时不带openssl则需要此行
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn