use*_*442 0 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;
Run Code Online (Sandbox Code Playgroud)
我已经在这里阅读了有关使用 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"
)
)
Run Code Online (Sandbox Code Playgroud)
);
但是没有任何效果,我现在收到 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',
),
));
Run Code Online (Sandbox Code Playgroud)
您还可以使用该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',
),
));
Run Code Online (Sandbox Code Playgroud)
上面的两个示例都应该可以工作,您现在应该能够使用以下方法获取内容:
$content = file_get_contents('https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000', false, $context);
echo $content;
Run Code Online (Sandbox Code Playgroud)
这当然也可以使用命令行中的 curl 进行测试。请注意,我们正在设置自己的User-Agent标题:
curl --verbose -H 'User-Agent: YourApplication/1.0' 'https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000'
Run Code Online (Sandbox Code Playgroud)
可能还值得知道User-Agentcurl 使用的默认值似乎被阻止,因此如果使用 curl 您需要使用该-H标志添加自己的。
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |