File_get_contents,curl 不起作用

Mig*_*uel 5 php api curl

发生了一些奇怪的事情,我想知道为什么。

在这个网址上: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)

并且工作了。为什么会发生这种情况?这是怎么回事?

Jef*_*ett 3

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)