PHP 无法从 URL 获取文本(file_get_content,CURL 无效)
PHP Cannot get the text from an URL (file_get_content, CURL did not work)
我正在尝试从以下 url 中获取文本。
http://stp.stheadline.com/data/indexNewsMarquee.json
我尝试了几种方法,但其中 none 行得通。我现在真的很绝望,请帮助我并提前致谢。
P.S。我已经在 ini.php 中启用了 allow_url_fopen。
P.S。我正在使用 XAMPP v3.3.2 和 PHP v5.6.23
以下是我尝试过(但失败)的代码
CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
结果:空字符串
file_get_contents
echo file_get_contents($url, true);
结果:无法打开流:HTTP 请求失败!
读取文件
echo readfile($url)
结果:输出地址本身
他们要求用户代理出现在请求中,所以尝试:
$url='http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'banana');
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
使用就像这样:
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'Your URL');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
print_r($query);
我从您的 URL 那里查看了这段代码。
您好,您必须在 curl 请求中传递 header,这样服务器才能将其视为浏览器请求。
$url="http://stp.stheadline.com/data/indexNewsMarquee.json";
$requestHeaders = array(
"Accept:application/json, text/javascript, */*; q=0.01",
"Accept-Language:en-US,en;q=0.8",
"Connection:keep-alive",
"Host:stp.stheadline.com",
"Origin:http://stp.stheadline.com",
"Referer:http://stp.stheadline.com/data/indexNewsMarquee.json",
"User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
试试这个。
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://stp.stheadline.com/data/indexNewsMarquee.json');
$result = curl_exec($ch);
curl_close($ch);
echo($result); // Json data
/*$obj = json_decode($result); // To get result in array
print_r($obj);*/
或
$url = 'http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo($result); // Json data
它对我有用:)
凯文,
请尝试以下代码。
header('Content-Type: text/html; charset=utf-8');
$url='http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('text/html; charset=utf-8'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
$final_result = json_decode($result);
echo "<pre>";
print_r($final_result);
我在你的代码中添加了 header('Content-Type: text/html; charset=utf-8');
和 curl_setopt($ch, CURLOPT_ENCODING, "");
,它会很好地工作,也会显示正确的字符。
我正在尝试从以下 url 中获取文本。 http://stp.stheadline.com/data/indexNewsMarquee.json
我尝试了几种方法,但其中 none 行得通。我现在真的很绝望,请帮助我并提前致谢。
P.S。我已经在 ini.php 中启用了 allow_url_fopen。 P.S。我正在使用 XAMPP v3.3.2 和 PHP v5.6.23
以下是我尝试过(但失败)的代码
CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
结果:空字符串
file_get_contents
echo file_get_contents($url, true);
结果:无法打开流:HTTP 请求失败!
读取文件
echo readfile($url)
结果:输出地址本身
他们要求用户代理出现在请求中,所以尝试:
$url='http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'banana');
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
使用就像这样:
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'Your URL');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
print_r($query);
我从您的 URL 那里查看了这段代码。
您好,您必须在 curl 请求中传递 header,这样服务器才能将其视为浏览器请求。
$url="http://stp.stheadline.com/data/indexNewsMarquee.json";
$requestHeaders = array(
"Accept:application/json, text/javascript, */*; q=0.01",
"Accept-Language:en-US,en;q=0.8",
"Connection:keep-alive",
"Host:stp.stheadline.com",
"Origin:http://stp.stheadline.com",
"Referer:http://stp.stheadline.com/data/indexNewsMarquee.json",
"User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
试试这个。
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://stp.stheadline.com/data/indexNewsMarquee.json');
$result = curl_exec($ch);
curl_close($ch);
echo($result); // Json data
/*$obj = json_decode($result); // To get result in array
print_r($obj);*/
或
$url = 'http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo($result); // Json data
它对我有用:)
凯文,
请尝试以下代码。
header('Content-Type: text/html; charset=utf-8');
$url='http://stp.stheadline.com/data/indexNewsMarquee.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('text/html; charset=utf-8'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
$final_result = json_decode($result);
echo "<pre>";
print_r($final_result);
我在你的代码中添加了 header('Content-Type: text/html; charset=utf-8');
和 curl_setopt($ch, CURLOPT_ENCODING, "");
,它会很好地工作,也会显示正确的字符。