簡體   English   中英

有沒有辦法解決php file_get_contents的403錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM