PHP使用隧道HTTP代理使用示例,实际信息根据自身需求更改。
1、PHP curl
<?php
$url = 'https://httpbin.org/get';
//获取到的代理IP和端口
$proxy = 'ip:port';
//用户的用户名和密码,使用账密模式访问代理的时候用到。
$proxyauth = 'username:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//设置代理
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//使用账密模式访问代理时设置账密。如果使用IP白名单模式,请注释掉下行
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
//设置使用的代理类型
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
if ( ! $res = curl_exec($ch))
{
trigger_error(curl_error($ch));
}
curl_close($ch);
echo $res;
?>
2、PHP stream
/**
* 请求
*
* @param [type] $targetUrl 目标站点
* @param [type] $proxyIp 代理ip
* @param [type] $proxyPort 代理端口
* @param [type] $proxyUser username
* @param [type] $proxyPassword password
* @return void
*/
function sendRequest($targetUrl, $proxyIp, $proxyPort, $proxyUser, $proxyPassword){
$proxyAuth = base64_encode($proxyUser . ":" . $proxyPassword);
$headers = implode("\r\n", [
"Proxy-Authorization: Basic {$proxyAuth}"
]);
// 目标站为https时需要
// $sniServer = parse_url($targetUrl, PHP_URL_HOST);
$options = [
"http" => [
"proxy" => $proxyIp . ':' . $proxyPort,
"header" => $headers,
"method" => "GET",
"request_fulluri" => true,
],
// 目标站为https时需要
// 'ssl' => array(
// 'SNI_enabled' => true,
// 'SNI_server_name' => $sniServer
// )
];
$context = stream_context_create($options);
$result = file_get_contents($targetUrl, false, $context);
return $result;
}
$data = sendRequest('https://httpbin.org/get', 'ip.hahado.cn', 10080, 'username', 'password');
var_dump($data);
3、PHP GuzzleHttp
/**
* 请求
*
* @param [type] $targetUrl 目标站点
* @param [type] $proxyIp 代理ip
* @param [type] $proxyPort 代理端口
* @param [type] $proxyUser authKey(key)
* @param [type] $proxyPassword authpwd(密码)
* @return void
*/
function sendRequest($targetUrl, $proxyIp, $proxyPort, $proxyUser, $proxyPassword){
$client = new \GuzzleHttp\Client();
$proxyAuth = base64_encode($proxyUser . ":" . $proxyPassword);
$options = [
"proxy" => $proxyIp . ':' . $proxyPort,
"headers" => [
"Proxy-Authorization" => "Basic " . $proxyAuth
]
];
$result = $client->request('GET', $targetUrl, $options);
return $result->getBody()->getContents();
}
$data = sendRequest('https://httpbin.org/get', 'ip.hahado.cn', 10080, 'username', 'password');
var_dump($data);
实际效果如图: