使用代理IP

简介

某些情况下需要更换IP才能访问指定的应用,例如爬取网页时,如果你没有使用代理IP,那么你的IP一旦被对方服务器封禁,那么你就无法再爬取对方的资源了。

使用代理IP

我这里使用的是快代理的服务。购买了一天的独享IP来测试。

测试代理可用性

HTTP代理

#带上用户名密码
curl -v "https://dev.kdlapi.com/testproxy" -x username:password@122.96.59.105:23068

#直接添加Proxy-Authorization
curl -v -H "Proxy-Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk" "https://dev.kdlapi.com/testproxy" -x 122.96.59.105:23068

bXl1c2VybmFtZTpteXBhc3N3b3Jk是用户名和密码通过:拼接后进行base64编码而成。
例如您的用户名是username,密码是password,用如下PHP脚本即可生成base64验证串:

echo base64_encode('username:password');

SOCKS代理

#带上用户名密码
curl -v "https://dev.kdlapi.com/testproxy" --socks5 username:password@122.96.59.105:23068

也可以使用谷歌浏览器的“SwitchyOmega”插件来测试:

PHP使用代理

<?php
$url = 'https://dev.kdlapi.com/testproxy';
$header[] = 'Proxy-Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk';
$data = curlGet($url,$header,'122.96.59.105',23068);
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;
}

注意事项

访问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网页的测试

发表评论

邮箱地址不会被公开。 必填项已用*标注