当我们在日常应用HTTP代理的时候,终端IP不固定的情况下,或者需要多机器同时使用HTTP代理时,就会遇到一个问题:如何使用带有用户名密码认证的HTTP(S)代理?
按照下列步骤,能轻松解决这一问题!
1.用户帐密
用户名是AuthKey,密码AuthPwd,用户名和密码都可以在用户中心的业务列表中查看;
2.授权错误提示
代理的用户名密码认证协议一般采用标准的“HTTP?Basic?Authentication”。如果用户认证错误,系统会返回“407?Proxy?Authentication?Required”;
3.请求协议头
如果代码的HTTP请求方法不支持以用户名密码的形式设置身份认证信息,则需要手动为每个HTTP请求增加Proxy-Authorization协议头,其值为“Basic”;
其中【用户名】和【密】通过?:?拼接后,再经由“BASE64”编码得到的字符串。
4.参考案例
(1)在浏览器中使用代理(以IE浏览器为例)
打开IE浏览器,依次点击打开【菜单】->【工具】->【Internet?选项】->【连接】->【局域网设置】,勾选【为?LAN?使用代理服务器】。如下图所示:
输入HTTP代理和端口,然后打开任意网站,会出现【Windows?安】窗口(如下图示),输入代?理的用户名和密码,勾选【记住我的凭据】确定即可;
(2)在?Python中使用代理
?
import?urllib2
#设置你的HTTP代理包含用户名密码
proxy='账号:密码@ip:port'
#你要访问的网址
url?=?'ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名'
opener?=?urllib2.build_opener()
if?url.lower().startswith('https://'):
opener.add_handler(urllib2.ProxyHandler({'https'?:?proxy}))
else:
opener.add_handler(urllib2.ProxyHandler({'http'?:?proxy}))
request?=?urllib2.Request(url)
response?=?opener.open(request)
content?=?response.read()
(3)在PHP中使用代理
?
function?curlFile($url,?$proxy_ip,?$proxy_port,?$loginpassw)
{
//$loginpassw?=?'账号:密码';
//$proxy_ip?=?'ip';
//$proxy_port?=?'port';
//$url?=?'ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名';
$ch?=?curl_init();
curl_setopt($ch,?CURLOPT_URL,?$url);
curl_setopt($ch,?CURLOPT_HEADER,?0);
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?1);
curl_setopt($ch,?CURLOPT_PROXYPORT,?$proxy_port);
curl_setopt($ch,?CURLOPT_PROXYTYPE,?'http');
curl_setopt($ch,?CURLOPT_PROXY,?$proxy_ip);
curl_setopt($ch,?CURLOPT_PROXYUSERPWD,?$loginpassw);
$data?=?curl_exec($ch);
curl_close($ch);
return?$data;
}
(4)在C#中使用代理
using?System.Net;
namespace?ProxyTest
{
????class?Program
????{
????????static?void?Main(string[]?args)
????????{
????????????WebClient?wc?=?new?WebClient();
????????????wc.Proxy?=?new?WebProxy("ip",?port);
????????????wc.Proxy.Credentials?=?new?NetworkCredential("帐号",?"密码");
????????????string?text?=?wc.DownloadString("ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名");
????????????Console.WriteLine(text);
????????}
????}
}
?
(5)在?VC?Win32?Wininet?库中使用代理
#include?
#include?
#include?
#pragma?comment(lib,?"wininet.lib")
int?main(int?argc,?char?*argv[],?char?*env[])
{
????char?url[]?=?"ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名";
????char?proxyinfo[]?=?"ip:port";
????char?usernm[]?=?"帐号";
????char?passwd[]?=?"密码";
????char?text[8192]?=?{};
????DWORD?dwReadSize?=?0;
????BOOL?bOK?=?FALSE;
????HINTERNET?hInternet?=?InternetOpen(NULL,?INTERNET_OPEN_TYPE_PROXY,?proxyinfo,?NULL,?0);
????HINTERNET?hUrl?=?InternetOpenUrl(hInternet,?url,?NULL,?0,?0,?NULL);
????bOK?=?InternetSetOption(hUrl,?INTERNET_OPTION_PROXY_USERNAME,?usernm,
????strlen(usernm));
????bOK?=?InternetSetOption(hUrl,?INTERNET_OPTION_PROXY_PASSWORD,?passwd,
????strlen(passwd));
????bOK?=?(BOOL)InternetReadFile(hUrl,?text,?sizeof(text),?&dwReadSize);
????printf(text);
????return?0;
}
|