发生了一些奇怪的事情,我想知道为什么。
在这个网址上:http://api.promasters.net.br/cotacao/v1/valores?moedas=USD&alt=json,它在浏览器中运行良好,但是当我尝试使用 php 检索内容时:
echo file_get_contents('http://api.promasters.net.br/cotacao/v1/valores?moedas=USD&alt=json');
Run Code Online (Sandbox Code Playgroud)
没有打印任何内容var_dump(...) = string(0) "",所以我更进一步并使用:
function get_page($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, True);
curl_setopt($curl, CURLOPT_URL, $url);
$return = curl_exec($curl);
curl_close($curl);
return $return;
}
echo get_page('http://api.promasters.net.br/cotacao/v1/valores?moedas=USD&alt=json');
Run Code Online (Sandbox Code Playgroud)
也没有打印任何内容,所以我尝试了 python (3.X):
import requests
print(requests.get('http://api.promasters.net.br/cotacao/v1/valores?moedas=USD&alt=json').text)
Run Code Online (Sandbox Code Playgroud)
并且工作了。为什么会发生这种情况?这是怎么回事?
file_get_contents考虑到 php curl 并且似乎没有在请求标头中设置值,看起来他们正在阻止用户代理,或者缺乏用户代理。
你可以通过将其设置为类似的内容来伪造它Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
<?php
function get_page($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, True);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101 Firefox/7.0.1');
$return = curl_exec($curl);
curl_close($curl);
return $return;
}
echo get_page('http://api.promasters.net.br/cotacao/v1/valores?moedas=USD&alt=json');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3420 次 |
| 最近记录: |