目录
1 简介
2 使用代理IP
3 查看本机IP
4 测试代理可用性
4.1 HTTP代理
4.2 SOCKS代理
5 PHP使用代理
6 隧道代理
6.1 PHP使用隧道代理
6.2 PHP的Guzzle库使用代理
7 注意事项
7.1 访问https网站请设置IP白名单
简介
某些情况下需要更换IP才能访问指定的应用,例如爬取网页时,如果你没有使用代理IP,那么你的IP一旦被对方服务器封禁,那么你就无法再爬取对方的资源了。
使用代理IP
我这里使用的是快代理的服务。购买了一天的独享IP来测试。
例如118.24.219.151:16816
就是购买的代理IP
查看本机IP
浏览器访问如下地址:
或
也可以使用快代理提供的网址:
测试代理可用性
HTTP代理
#带上用户名密码
curl -v "https://dev.kdlapi.com/testproxy" -x username:password@118.24.219.151:16816
#直接添加Proxy-Authorization
curl -v -H "Proxy-Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk" "https://dev.kdlapi.com/testproxy" -x 118.24.219.151:16816
bXl1c2VybmFtZTpteXBhc3N3b3Jk是用户名和密码通过:
拼接后进行base64编码而成。
例如您的用户名是username,密码是password,用如下PHP脚本即可生成base64验证串:
SOCKS代理
也可以使用谷歌浏览器的“SwitchyOmega”插件来测试:
PHP使用代理
<?php
$url = 'https://dev.kdlapi.com/testproxy';
$header[] = 'Proxy-Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk';
$data = curlGet($url,$header,'118.24.219.151',16816);
var_dump($data);die;
function curlGet($url = '', $header=[],$proxy='',$proxyPort='')
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
if($header){
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxyPort);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch);
if($data === false)
{
echo 'Curl error: ' . curl_error($ch);die;
}
curl_close($ch);
return $data;
}
隧道代理
用户无须更换IP,隧道代理会将用户发送的请求转发到不同的代理IP。
使用隧道代理,开发者无需维护IP池,极大简化了编程的复杂度。
可以设置每次请求更换代理。
PHP使用隧道代理
代码中的xxx.xxxx.com就是代理的IP,10086就是代理的端口。
$url = 'https://api.ip.sb/ip';
$header[] = 'Proxy-Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk';
$data = curlGet($url,$header,'xxx.xxxx.com',10086);
var_dump($data);die;
function curlGet($url = '', $header=[],$proxy='',$proxyPort='')
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
if($header){
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxyPort);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch);
if($data === false)
{
echo 'Curl error: ' . curl_error($ch);die;
}
curl_close($ch);
return $data;
}
PHP的Guzzle库使用代理
注意事项
访问https网站请设置IP白名单
curl(版本>7.30)在发起CONNECT请求时并不会在header里带上Proxy-Authorization,即便做了-H “Proxy-Authorization: Basic …或-x username:password@122.96.59.105:23068,这会导致代理服务器找不到Proxy-Authorization来验证身份,于是返回407错误
查看curl版本:curl --version
请在设置IP白名单后再做对https网页的测试
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://sg.hqyman.cn/post/9581.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~