[英]Is there a way to get round a 403 error with php file_get_contents?
我正在嘗試使用php file_get_contents獲取特定的網頁-當我直接查看該頁面時沒有問題,但是當嘗試使用php進行抓取時,我收到“無法打開流:HTTP請求失敗!HTTP / 1.1 403禁止訪問”。 我正在嘗試從頁面中提取一段數據。
$ft = file_get_contents('https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000');
echo $ft;
我在這里閱讀了有關使用stream_context_create的各個頁面,主要是用戶代理部分
$context = stream_context_create(
array(
"http" => array(
"header" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
)
)
);
但是沒有任何效果,我現在收到一條400錯誤消息。 不幸的是,我的服務器沒有配置為使用cURL,因此file_get_contents似乎是我執行此操作的唯一方法。
您需要將User-Agent
標頭添加到實際標頭中:
$context = stream_context_create(
array(
'http' => array(
'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
),
));
您還可以使用user_agent
選項:
$context = stream_context_create(
array(
'http' => array(
'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
),
));
上面的兩個示例都應該起作用,並且現在您應該能夠使用以下命令獲取內容:
$content = file_get_contents('https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000', false, $context);
echo $content;
當然,這也可以使用命令行中的curl進行測試。 注意,我們正在設置自己的User-Agent
標頭:
curl --verbose -H 'User-Agent: YourApplication/1.0' 'https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000'
也許還應該知道curl所使用的默認User-Agent
似乎已被阻止,因此,如果使用curl,則需要使用-H
標志添加自己User-Agent
。
如@ADyson所說,Vesselfinder是您正在請求的服務,似乎拒絕自動解析其數據。 閱讀文檔: https : //www.vesselfinder.com/de/realtime-ais-data#rt-web-services您可能會要求他們提供API令牌,也許這是付費計划。
他們有一個官方的API。 您需要一個Api密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.