什麼是代理?什麼狀況下會用到代理IP?api
代理服務器(Proxy Server),其功能就是代用戶去取得網絡信息,而後返回給用戶。形象的說:它是網絡信息的中轉站。經過代理IP訪問目標站,能夠隱藏用戶的真實IP。服務器
好比你要抓取一個網站數據,該網站有100萬條內容,他們作了IP限制,每一個IP每小時只能抓1000條,若是單個IP去抓由於受限,須要40天左右才能採集完,若是用了代理IP,不停的切換IP,就能夠突破每小時1000條的頻率限制,從而提升效率。網絡
其餘想切換IP或者隱藏身份的場景也會用到代理IP,好比SEO等。tcp
代理IP有開放代理也有私密代理,開放代理是全網掃描而來的,不穩定,不適合爬蟲,若是本身隨便用用還好。用爬蟲抓數據,最好使用私密代理。私密代理網上有不少提供商,穩定性良莠不齊,如今咱們公司使用的是「億牛雲」提供的私密代理。網站
咱們公司有個項目是抓取亞馬遜數據來進行分析銷量、評論等,用PHP進行抓取,抓取亞馬遜要特別注意header頭,不然輸出的數據就是空了。咱們以前是使用的其餘家代理的api模式的,可是本身管理ip池以爲很麻煩,因此選擇了億牛雲提供的爬蟲代理,動態轉發模式的,不須要咱們本身管理ip池,直接進行數據採集,這很方便也節約了不少時間。url
$url = "https://www.amazon.com/dp/B01H2S9F6C";spa
$urls = "https://httpbin.org/ip";代理
define("PROXY_SERVER", "tcp://t.16yun.cn:31111");code
define("PROXY_USER", "16YUN123");server
define("PROXY_PASS", "123456");
$proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS);
$tunnel = rand(1,10000);
$headers = implode("\r\n", [
"Proxy-Authorization: Basic {$proxyAuth}",
"Proxy-Tunnel: ${tunnel}",
]);
$sniServer = parse_url($urls, PHP_URL_HOST);
$options = [
"http" => [
"proxy" => PROXY_SERVER,
"header" => $headers,
"method" => "GET",
'request_fulluri' => true,
],
'ssl' => array(
'SNI_enabled' => true, // Disable SNI for https over http proxies
'SNI_server_name' => $sniServer
)
];
print($url);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
print($urls);
$context = stream_context_create($options);
$result = file_get_contents($urls, false, $context);
var_dump($result);?>