2017-08-31 3 views
1

Ich habe diesen Code:, wie man liest Daten aus url

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

und das Objekt hier leer ist, keine Daten verfügbar, aber wenn ich die URL von Browser zugreifen das Ergebnis ist folgende:

{"currency": "DCR", "unsold": 0.030825917365192, "balance": 0.02007306, "unpaid": 0.05089898, "paid24h": 0.05796425, "total": 0.10886323} 

was fehlt mir?

+0

Zunächst einmal können Sie nicht echo Objekte – ArtOsi

+0

wenn ich setzen, dass URL im Browser bekam ich einen 404., dass es sein könnte. In PHP können Sie die Antwort vom Server überprüfen, indem Sie den Wert von $ HTTP_Response_header direkt nach dem Abschluss der Anfrage betrachten. Zweitens, wenn Sie json_decode ausführen, wird der JSON-Text in ein PHP-Objekt umgewandelt, das normalerweise nicht korrekt echotiert. Sie müssten also 'var_dump ($ obj);' auf dem Bildschirm sehen. Oder einfach 'echo $ json;' natürlich. – ADyson

+0

@ADyson, manchmal die URL funktioniert nur nicht für bestimmte Leute, für mich funktioniert es immer noch, aber es hat auch nicht eine halbe Stunde alt, versuchen Sie es wieder in einer gewissen Zeit –

Antwort

2

Wenn Sie mit file_get_contents Sie für die Anforderung, den Kontext setzen müssen gehen müssen. Anscheinend benötigt diese URL eine user-agent Zeichenkette in den Kopfzeilen (Ursache, wissen Sie ... Anti-bot-secruity).

Die folgenden Werke:

<?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}" 

jedoch. Ich schlage dringend cURL

file_get_contents() ist ein einfacher Schraubendreher. Großartig für einfache GET Anfragen, wo der Header, HTTP-Anfrage-Methode, Timeout, Cookiejar, Weiterleitungen und andere wichtige Dinge egal sind. https://stackoverflow.com/a/11064995/2119863

Also bitte file_get_contents stoppen.

<?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)); 

und Sie erhalten:

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

das scheint zu funktionieren! Es war der Wert des Benutzeragenten –

-1

Wie von anderen erwähnt, scheint es ein Problem mit der API zu geben. Persönlich gab die URL Daten beim ersten Laden zurück, konnte aber bei meinen nächsten Anfragen nicht erreicht werden.

Dieser Code (mit einer anderen URL) funktioniert für mich völlig in Ordnung:

$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

Yeah Code funktioniert, weil das Problem nicht mit dem Code selbst zusammenhängt. Auch das sieht nicht wie eine Antwort aus. – ArtOsi

+0

Wenn ich einen anderen Link benutze, funktioniert es auch für mich, aber ich brauche den spezifischen Link zur Arbeit ... deshalb habe ich auch den Link –

+0

fyi ... ich interessiere mich nicht, wenn der Link nicht von Zeit zu Zeit funktioniert zu Zeit, ich brauche es nur einmal am Tag zu arbeiten, auch wenn ich während des Tages mehr Anrufe mache –

Verwandte Themen