使用 cUrl 没有输出

5

我正在尝试接收一个json文件的内容,但是当我想要输出($json)时,它没有给我任何东西。我查看了一些涉及cUrl的其他问题,并使用了在答案中提供的cUrl设置,所以应该工作正常。我做错了什么吗?以下是我的代码:

$url = 'http://steamcommunity.com/profiles/<your 64-bit steam ID>/inventory/json/730/2';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$json = json_decode($output, true);
print_r($json);

我猜要正常查看那个URL,你必须先登录? - Professor Abronsius
不,你只需要将Steam账户上的某些隐私设置设为公开即可。而且我正在使用自己的账户尝试这个方法,所以我可以百分之百确定这是正确的。 - Mikelo
我会尝试在curl选项中添加一个用户代理,这是一个常见的检查事项。 - Professor Abronsius
很遗憾,那并没有帮助到。 - Mikelo
1个回答

4
$output = curl_exec($ch);这行代码后面添加以下内容:
$info = curl_getinfo($ch);
echo "<pre>";   
print_r($info);
echo "</pre>";

请在此处打印您在浏览器中看到的内容,没有这些信息,人们将无法帮助您。
我运行了您的代码,它能够正常工作。我的HTTP响应码是200,页面成功加载。该页面显示:"找不到指定的配置文件"(没问题,因为我没有密钥)。
我的$info输出为:
Array
(
    [url] => http://steamcommunity.com/profiles//inventory/json/730/2
    [content_type] => text/html; charset=UTF-8
    [http_code] => 200
    [header_size] => 927
    [request_size] => 109
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.561
    [namelookup_time] => 0.062
    [connect_time] => 0.109
    [pretransfer_time] => 0.109
    [size_upload] => 0
    [size_download] => 18266
    [speed_download] => 32559
    [speed_upload] => 0
    [download_content_length] => 18266
    [upload_content_length] => -1
    [starttransfer_time] => 0.561
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 2.17.165.89
    [certinfo] => Array
        (
        )

    [primary_port] => 80
    [local_ip] => 192.168.1.33
    [local_port] => 53366
)    

一切都运行得很完美。也许你与steamcommunity.com的连接不太好?如果你收到 [http_code] => 0 这个代码,就意味着是这个原因。

如果添加以下代码,你会看到什么:

print_r($output);

可能页面已经加载了,但不是JSON格式?如果是这样,请检查您的$json是否为空,这是完全可以的。

在您的评论后更新:

您收到了302 HTTP代码和重定向URL。 您需要访问此URL,然后您将收到JSON响应。完整代码如下:

$url = 'http://steamcommunity.com/profiles/<your 64-bit steam ID>/inventory/json/730/2';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_setopt($ch, CURLOPT_URL, $info["redirect_url"]); // Set new URL
$output = curl_exec($ch); // Go to new URL
$json = json_decode($output, true); // Your JSON here, I checked it
print_r($json); // Print JSON

谢谢您的回复!这是我的$info结果:http://pastebin.com/XKr6qcy0。所以,http_code给了我302。另外,在打印$输出时,它给了我这个:“‹ÿÿ,3个奇怪的字符…” - Mikelo
非常好用 :) 非常感谢! - Mikelo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接