2016-04-08 11 views
0

Ich arbeite OAuth Yahoo.jp Login API

Warum file_get_contents gibt Fehler zurück?

verbinde ich Gebrauch file_get_contents http Anfrage aber Es Rückkehr Fehler

Hier ist mein Code

// my apps setting 
    $client_id = 'dj0zaiZpP~~~~~~~~~~~~~~~'; 
    $appSecret = '129ad~~~~~~~~~~~~~~~~'; 

    // the data to send 
    $data = array(
     'grant_type' => 'authorization_code', 
     'redirect_uri' => 'My_redierct_page', 
     'code' => $_GET['code'] 

    ); 
    $data = http_build_query($data); 

    $header = array(
     "Authorization: Basic " . base64_encode($client_id . ':' . $appSecret), 
     "Content-Type: application/x-www-form-urlencoded", 
     "Content-Length: ".strlen($data) 
    ); 

    // build your http request 
    $context = stream_context_create(array(
     'http' => array(
      'method' => 'POST', 
      'header' => implode("\r\n", $header), 
      'content' => $data, 
      'timeout' => 10 
      ) 
     )); 

    // send it 
    $resp = file_get_contents('https://auth.login.yahoo.co.jp/yconnect/v1/token', false, $context); 
    $json = json_decode($resp); 

    echo($json->token_type . " " . $json->access_token); 

Das versuchen Senden Ergebnis ...

file_get_contents (https://auth.login.yahoo.co.jp/yconnect/v1/token): Fehler beim Öffnen des Streams: HTTP-Anforderung fehlgeschlagen! HTTP/1.0 400 Bad Request in /var/www/html/api/auth_proc2.php on line 33


Hier ist eine weitere Fehlermeldung set_error_handler()

file_get_contents erhalten mit (): Content-type nicht application/x-www-form-urlencoded

angegeben unter der Annahme,

Ich kann diese Situation nicht verstehen
Weil ich Content-type in HTTP-Header und allow_url_fopen = on in meiner php.ini

Bitte helfen Sie mir senden ~! Vielen Dank.

Antwort

0

Die andere Sache, die ich vorschlagen würde, ist CURL anstatt file_get_contents aus mehreren Gründen; Erstens haben Sie viel mehr Kontrolle über die Anfrage, zweitens ist es mehr Standard für die Verwendung von Curl-Anfragen im Umgang mit APIs und drittens können Sie besser sehen, was Ihr Problem ist.

Versuchen Sie, Ihren Code durch die folgenden zu ersetzen und sehen Sie, was Sie bekommen.

$client_id = 'dj0zaiZpP~~~~~~~~~~~~~~~'; 
$appSecret = '129ad~~~~~~~~~~~~~~~~'; 

$data = array(
    'grant_type' => 'authorization_code', 
    'redirect_uri' => 'My_redierct_page', 
    'code' => $_GET['code'] 
); 

$curl = curl_init('https://auth.login.yahoo.co.jp/yconnect/v1/token'); 

curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); 
curl_setopt($curl, CURLOPT_USERPWD, $client_id . ':' . $appSecret); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$response = curl_exec($curl); 
$info = curl_getinfo($curl); 

print_r($response); 
echo '<br /><br />'; 
print_r($info); 

curl_close($curl); 
0

Ich nehme seine wahrscheinlich, weil Ihre Content-Type verwenden und nicht Content-type und Content-Length statt Content-length.

+0

Danke für Ihren Kommentar! Ich versuche, die Schreibweise in T-> t und L-> l zu ändern, aber immer noch den gleichen Fehler –

Verwandte Themen