使用 php 修复请求失败
Fix request failed using php
我使用 Linkedin 创建了一个 api 网站。创建所有文件后,我的应用程序 运行 正常,但唯一有问题的是当我尝试允许该网站时,出现以下错误:
我的目的是在这个页面访问:
我的代码在这一行有错误:
init.php
<?php
SESSION_start();
$client_id="xxxxxxxxxxxxxx";
$client_secret="xxxxxxxxxxxxxxxx";
$redirect_uri="http://localhost/gmail-connect.php/callback.php";
$csrf_token = "random_int(1111111, 9999999)";
$scopes="r_basicprofile%20r_emailaddress";
function curl($url, $parameters)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_POST, 1);
$header =[];
$header[] = "Content-type:applicationx-www-form-urlencoded";
$result = curl_exec($ch);
return $result;
}
function getCallback()
{
$client_id="xxxxxxxxxxxxxx";
$client_secret="jxxxxxxxxxxxxxxxx";
$redirect_uri="http://localhost/gmail-connect.php/callback.php";
$csrf_token ="random_int(1111111, 9999999)";
$scopes="r_basicprofile%20r_emailaddress";
}
if(isset($_REQUEST['code'])) {
$code = $_REQUEST['code'];
$url = "https://www.linkedin.com/oauth/v2/accessToken";
$params = [
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'code' => $code,
'grant_type' => 'authorization_code',
];
$accessToken = curl($url, http_build_query($params));
$accessToken = json_decode($accessToken)->access_Token;
$URL="https://api.linkedin.com/v1/people/~:(id,firstName,lastName,pictureUrls::(original),headline,publicProfileUrl,location,industry,positions,email-address)?format=json&oauth2_access_token=" .$accessToken;
$user = file_get_contents($url, false);
return(json_decode($user));
}
?>
Callback.php:
<?php
require_once "init.php";
$user = getCallback();
$_SESSION['user'] = $user;
header("location: landing.php");
?>
这是着陆页:
<?php
require "init.php";
if(!isset($_SESSION['user'])) {
$user = 0;
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>profile</title>
</head>
<body style="margin-top:200px; text-align:center;">
<div>
<h1>successful</h1>
<h1>here is describing your details info</h1>
<label style="font-weight:600">First Name</label><br>
<label><?php echo $user['firstName'] ?></label><br><br>
<label style="font-weight:600">Last Name</label><br>
<label><?php echo $user['lastName'] ?></label><br><br>
<label style="font-weight:600">Email address</label><br>
<label><?php echo $user['emailaddress'] ?></label><br><br>
<label style="font-weight:600">Headline</label><br>
<label><?php echo $user['headline'] ?></label><br><br>
<label style="font-weight:600">Industry</label><br>
<label><?php echo $user['industry'] ?></label><br><br>
<button><a href="logout.php">Log out</a></button>
</div>
</body>
</html>
x 为了安全起见,我放了$client_secret=""
、$client_id=""
。
在这个项目中,我希望看到我的个人资料已完成,并在登陆页面上显示了详细信息,而不是空的,因为它显示在这里,例如名字中要写的名字等。
如何解决这些错误,谢谢
第一个错误(未定义 属性)是因为 HTTP 请求未在以下位置获得有效响应($accessToken):
$accessToken = curl();
这可能是因为请求的 URL 无效。您可以:
- 检查
$params
数组是否设置正确。在调用 curl 之前调用 print_r($params)
或 print_r(http_build_query($params))
来检查它。
- 检查
curl()
调用是否有正确的参数(url 和参数)最好只使用完整的 url ($url 。" " . http_build_query($params)) 如果请求使用 GET,但是
- accessToken API 必须作为 POST 请求(而非 GET)请求,因此请确保您的 cUrl 调用发送 POST 请求(参见:https://developer.linkedin.com/docs/oauth2#)
第二个错误与第一个错误有关,因为访问令牌为空,您收到 HTTP 400 错误(错误请求)。因此,如果您解决了第一步,那么第二步就可以了。
在 $accessToken 之前尝试此代码:
$context = stream_context_create(
array('http' =>
array('method' => 'POST',
)
)
);
return true;
这解决了错误信息
我使用 Linkedin 创建了一个 api 网站。创建所有文件后,我的应用程序 运行 正常,但唯一有问题的是当我尝试允许该网站时,出现以下错误:
我的目的是在这个页面访问:
我的代码在这一行有错误:
init.php
<?php
SESSION_start();
$client_id="xxxxxxxxxxxxxx";
$client_secret="xxxxxxxxxxxxxxxx";
$redirect_uri="http://localhost/gmail-connect.php/callback.php";
$csrf_token = "random_int(1111111, 9999999)";
$scopes="r_basicprofile%20r_emailaddress";
function curl($url, $parameters)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_POST, 1);
$header =[];
$header[] = "Content-type:applicationx-www-form-urlencoded";
$result = curl_exec($ch);
return $result;
}
function getCallback()
{
$client_id="xxxxxxxxxxxxxx";
$client_secret="jxxxxxxxxxxxxxxxx";
$redirect_uri="http://localhost/gmail-connect.php/callback.php";
$csrf_token ="random_int(1111111, 9999999)";
$scopes="r_basicprofile%20r_emailaddress";
}
if(isset($_REQUEST['code'])) {
$code = $_REQUEST['code'];
$url = "https://www.linkedin.com/oauth/v2/accessToken";
$params = [
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'code' => $code,
'grant_type' => 'authorization_code',
];
$accessToken = curl($url, http_build_query($params));
$accessToken = json_decode($accessToken)->access_Token;
$URL="https://api.linkedin.com/v1/people/~:(id,firstName,lastName,pictureUrls::(original),headline,publicProfileUrl,location,industry,positions,email-address)?format=json&oauth2_access_token=" .$accessToken;
$user = file_get_contents($url, false);
return(json_decode($user));
}
?>
Callback.php:
<?php
require_once "init.php";
$user = getCallback();
$_SESSION['user'] = $user;
header("location: landing.php");
?>
这是着陆页:
<?php
require "init.php";
if(!isset($_SESSION['user'])) {
$user = 0;
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>profile</title>
</head>
<body style="margin-top:200px; text-align:center;">
<div>
<h1>successful</h1>
<h1>here is describing your details info</h1>
<label style="font-weight:600">First Name</label><br>
<label><?php echo $user['firstName'] ?></label><br><br>
<label style="font-weight:600">Last Name</label><br>
<label><?php echo $user['lastName'] ?></label><br><br>
<label style="font-weight:600">Email address</label><br>
<label><?php echo $user['emailaddress'] ?></label><br><br>
<label style="font-weight:600">Headline</label><br>
<label><?php echo $user['headline'] ?></label><br><br>
<label style="font-weight:600">Industry</label><br>
<label><?php echo $user['industry'] ?></label><br><br>
<button><a href="logout.php">Log out</a></button>
</div>
</body>
</html>
x 为了安全起见,我放了$client_secret=""
、$client_id=""
。
在这个项目中,我希望看到我的个人资料已完成,并在登陆页面上显示了详细信息,而不是空的,因为它显示在这里,例如名字中要写的名字等。
如何解决这些错误,谢谢
第一个错误(未定义 属性)是因为 HTTP 请求未在以下位置获得有效响应($accessToken):
$accessToken = curl();
这可能是因为请求的 URL 无效。您可以:
- 检查
$params
数组是否设置正确。在调用 curl 之前调用print_r($params)
或print_r(http_build_query($params))
来检查它。 - 检查
curl()
调用是否有正确的参数(url 和参数)最好只使用完整的 url ($url 。" " . http_build_query($params)) 如果请求使用 GET,但是 - accessToken API 必须作为 POST 请求(而非 GET)请求,因此请确保您的 cUrl 调用发送 POST 请求(参见:https://developer.linkedin.com/docs/oauth2#)
第二个错误与第一个错误有关,因为访问令牌为空,您收到 HTTP 400 错误(错误请求)。因此,如果您解决了第一步,那么第二步就可以了。
在 $accessToken 之前尝试此代码:
$context = stream_context_create(
array('http' =>
array('method' => 'POST',
)
)
);
return true;
这解决了错误信息