2017-08-31 83 views
1

數據我有這樣的代碼:如何讀取URL

$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} 

我錯過了什麼?

+0

首先,當我把那個URL在瀏覽器中我得到了404這可能是它,你可以不回對象 – ArtOsi

+0

。在PHP中,您可以通過在請求完成後立即查看'$ http_response_header'的值來檢查服務器的響應。其次,如果運行json_decode,它會將JSON文本轉換爲一個PHP對象,該對象通常不會正確回顯。所以你必須'var_dump($ obj);'在屏幕上看到它。或者只是'echo $ json;'當然。 – ADyson

+0

@ADyson,有時這個url只是對特定的人不起作用,對我來說它仍然有效,但它在半小時前也沒有工作,在一段時間內再次嘗試 –

回答

2

如果你需要和你一起去需要設置請求的情況下file_get_contents。顯然這個URL需要在標頭中看到一個user-agent字符串(原因是,你知道... 反機器人安全性)。

以下工作:

<?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,重定向以及其他重要的事情都無關緊要。 https://stackoverflow.com/a/11064995/2119863

所以請停止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) 
} 
+0

這似乎工作!這是用戶代理的價值 –

-1

正如其他人所說,API似乎存在問題。 個人而言,URL在第一次加載時返回了數據,但在下一次請求時無法到達。

此代碼(使用不同的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); 
+0

是的代碼是有效的,因爲問題不在於代碼本身。而且這看起來不像是答案。 – ArtOsi

+0

如果我使用另一個鏈接它也適用於我,但我需要特定的鏈接工作...這就是爲什麼我也加入了鏈接 –

+0

fyi ...我不在乎如果鏈接不工作到時候,我只需要它每天工作一次,即使我在白天撥打更多電話 –