我正在使用OAuth连接Yahoo.jp登录API
我尝试发送http请求使用file_get_contents但它返回错误
这是我的代码
// 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);
结果......
file_get_contents(https://auth.login.yahoo.co.jp/yconnect/v1/token):无法打开流:HTTP请求失败!第33行/var/www/html/api/auth_proc2.php中的HTTP / 1.0 400错误请求
以下是使用set_error_handler()
file_get_contents():假设application / x-www-form-urlencoded
未指定Content-type
我无法理解这种情况
因为我在http标头中发送内容类型
和我的php.ini中的allow_url_fopen = on
请帮帮我〜!感谢。
答案 0 :(得分:0)
我认为这可能是因为您使用Content-Type
而非Content-type
和Content-Length
而不是Content-length
。
答案 1 :(得分:0)
我建议使用的另一件事是CURL而不是file_get_contents
有多种原因;首先,您可以更好地控制请求,其次是在处理API时使用curl请求更为标准,第三,您将能够更好地了解您的问题。< / p>
尝试使用以下内容替换您的代码并查看您获得的内容。
$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);