如何从网址读取数据

时间:2017-08-31 08:25:17

标签: php json

我有这段代码:

$json = file_get_contents('http://yiimp.ccminer.org/api/wallet?address=DshDF3zmCX9PUhafTAzxyQidwgdfLYJkBrd');
$obj = json_decode($json);
var_dump($obj);

并且此处的对象为空,没有可用数据,但如果我从浏览器访问该URL,结果是:

{"currency": "DCR", "unsold": 0.030825917365192, "balance": 0.02007306, "unpaid": 0.05089898, "paid24h": 0.05796425, "total": 0.10886323}
我错过了什么?

2 个答案:

答案 0 :(得分:2)

如果您需要使用file_get_contents,则需要为请求设置上下文。显然这个URL需要在标题中看到user-agent字符串(因为,你知道...... anti-bot-secruity )。

以下作品:

<?php
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"User-Agent: foo\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://yiimp.ccminer.org/api/wallet?address=DshDF3zmCX9PUhafTAzxyQidwgdfLYJkBrd', false, $context);

var_dump($file);
// string(137) "{"currency": "DCR", "unsold": 0.030825917365192, "balance": 0.02007306, "unpaid": 0.05089898, "paid24h": 0.05796425, "total": 0.10886323}"

<强>然而即可。我强烈建议使用cURL

  

file_get_contents()是一个简单的螺丝刀。非常适合简单的GET   请求头,HTTP请求方法,超时,cookiejar,   重定向,和其他重要的事情无关紧要。   "An introduction to Pure Python."

请停止file_get_contents。

<?php
// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://yiimp.ccminer.org/api/wallet?address=DshDF3zmCX9PUhafTAzxyQidwgdfLYJkBrd',
    CURLOPT_USERAGENT => 'Sample cURL Request'
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);
var_dump(json_decode($resp));

你得到:

object(stdClass)#1 (6) {
  ["currency"]=>
  string(3) "DCR"
  ["unsold"]=>
  float(0.030825917365192)
  ["balance"]=>
  float(0.02007306)
  ["unpaid"]=>
  float(0.05089898)
  ["paid24h"]=>
  float(0.05796425)
  ["total"]=>
  float(0.10886323)
}

答案 1 :(得分:-1)

正如其他人所说,API似乎存在问题。 就个人而言,URL在第一次加载时返回了数据,但在下次请求时无法访问。

此代码(使用不同的网址)对我来说非常合适:

$json = file_get_contents('http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1');
$obj = json_decode($json);
print_r($obj);