【发布时间】:2020-11-29 23:59:08
【问题描述】:
这是提供 JSON 响应的链接:https://www.instagram.com/p/CDq1KJPJcTN/?__a=1
在浏览器中简单地复制和粘贴 URL 会给出 JSON 响应。但是当我尝试使用 file_get_contents 或 cURL 在 PHP 中访问相同的内容时,它显示的是 Instagram 的 html 页面代码
ini_set("allow_url_fopen", 1);
ini_set("allow_url_include", 1);
$context = [
'http' => [
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.47 Safari/537.36',
],
];
$context = stream_context_create($context);
$data = file_get_contents('https://www.instagram.com/p/CDq1KJPJcTN/?__a=1', false, $context);
卷曲:
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'https://www.instagram.com/p/CDq1KJPJcTN/?__a=1');
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.47 Safari/537.36');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
echo $query;
当我使用 rest api 测试工具时(https://resttesttest.com/)。它只给出 JSON 响应。我认为缺少一些重要的标题,我无法弄清楚。 Content-Type:application/json & Access-Control-Allow-Origin: * 给出。
【问题讨论】:
-
不知道 file_get_contents,但对于 cURL,您需要为安全 (
https) 目标主机设置连接。 -
当我运行该代码时,我得到一个 JSON 字符串,一个很大但绝对是一个 JSONString
-
@YvesLeBorg 我的 php 文件仅使用 https
-
可能的原因:如果您认为需要设置
allow_url_fopen,那么我猜它没有设置。但是,除了php.ini文件之外,您不能从任何地方更改它的值。如果可以的话,这将不是一个安全的设置 -
我使用 PHP CLI 运行它,工作正常,无论是否使用上下文