curl - 使用代理

  • 作者:KK

  • 发表日期:2017.6.2


要点速读

  1. 使用代理的需求比较罕见

  2. 我使用代理主要是为了调试

  3. 设置CURLOPT_PROXY选项就可以了,代码是curl_setopt($curlHandler, CURLOPT_PROXY, 'http://xxx.xxx.xxx.xxx');,第三个参数就是代理地址

  4. 如果你真的要用代理请求些什么,当这个代理需要账号密码认证时,我没试过,但你可以查一下CURLOPT_PROXYUSERPWD选项的使用说明


试验

第一步:准备一个代理

不用上网查找免费代理什么的了,我们可以通过Finddler这款软件开启一个本地代理,安装Finddler后在顶上菜单中选择Tools - Finddller Options

然后就会弹出下面这个选项,切换到Connection这个选项卡,大概扫一眼下图中"8888"这个数字留个印象,这是Finddler的代理端口号,接着钩选Allow remote computers to connect,会提醒你要重启Finddler才能生效,并且可能会遭到安全软件的权限提醒,要允许权限

此时Finddler的设置已经完毕


第二步:测试代码

以下代码我写在一个叫a.php的文件中

$url = 'http://test/b.php';
$proxy = 'http://127.0.0.1:8888';

$curlHandler = curl_init();
curl_setopt($curlHandler, CURLOPT_URL, $url);
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlHandler, CURLOPT_PROXY, $proxy);
$result = curl_exec($curlHandler);
curl_close($curlHandler);

echo $result;

在Finddler中可以看到2条请求记录

第一条是请求http://test/a.php的,这是我用浏览器请求这个测试脚本的

第二条是a.php通过curl请求http://test/b.php的记录


我什么时候需要使用本地代理

因为浏览器无法抓取curl的请求嘛,而且Finddler默认也无法抓curl的请求

所以我就将curl设置代理,让它的请求先走Finddler,再让Finddler帮忙请求,这样Finddler就能记录curl的通讯报文了,这样便于我做接口调试


其它

假设开启Finddler代理的机器IP是192.168.1.100

同一网段的任何机器都可以用PHP代码执行curl_setopt($curlHandler, CURLOPT_PROXY, 'http://192.168.1.100:8888');来使用这台机的Finddler代理