【问题标题】:PHP Curl get information from the page with redirectPHP Curl 通过重定向从页面获取信息
【发布时间】:2016-02-21 08:11:49
【问题描述】:

我有一个页面 A,它有重定向到页面 B 的位置标头

如果未授权,则在页面 B 上打印登录表单,如果已登录,则使用 GET 参数 CODE 重定向回页面 A。 页面A代码:

if (!$_GET['code']) {
header('Location: B');
}

页面 A 使用此代码从服务器获取信息,再次寻址到页面 B,但这次使用 CURL。 页面A代码:

$ch = curl_init();
..
curl_opt($ch, CURLOPT_URL, "B/token?code={SOMECODE}");
..
$data = curl_exec($ch);
curl_close($ch);
$result = json_decode($data);

现在我有 JSON 数据,我将继续在页面 A 上使用。页面 A 代码:

$ch = curl_init();
..
curl_opt($ch, CURLOPT_URL, "B/method/?data={SOMEDATA_FROM_$result}");
..
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result);

$json = [
'key1' => $response->value1,
'key2' => $response->value2,
];

echo json_encode($json);

所以现在我在 A 页上打印了 JSON 数据。

这里是页面 C,我使用 curl 从页面 A 获取此 JSON 数据,但页面 A 重定向到页面 B,我们必须在此处进行授权,并获取 GET 参数 CODE。所以我用 curl 来做。 页面C代码:

$ch = curl_init();

curl_setopt($ch, CURLOPT_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, 'A');

$result = curl_exec($ch);

curl_close($ch);

var_dump($result);

并且$result从页面B返回授权表单的HTML代码,即使我已授权,但如果我使用echo,它只会使用var_dump()它开始无限刷新页面。

如何在页面 C 上使用 curl 从页面 A 获取正确数据?

【问题讨论】:

  • 好的,所以结构是错误的。我想出不在页面 C 上使用 curl,只是从页面 C 到页面 A 的简单链接,使用 GET 参数作为到页面 C 的反向重定向链接。现在我只是在页面 B 上授权用户,将数据发送到页面 A,做我需要的所有事情,并使用 POST 请求将数据发送到页面 C。

标签: php json redirect curl get


【解决方案1】:

页面 A 和页面 C 在同一台服务器上吗?如果是,则在C页设置条件,如果客户端ip = 127.0.0.1则跳过登录过程,响应你想要的值。

【讨论】:

    【解决方案2】:

    好的,所以结构是错误的。我添加了 sheme,让你看看它现在是如何工作的。

    我想出不在页面 C 上使用 curl,只是从页面 C 到页面 A 的简单链接,使用 GET 参数作为到页面 C 的反向重定向链接。现在我只是在页面 B 上授权用户,将数据发送到页面 A,做我需要的所有事情,并使用 POST 请求将数据发送到页面 C。

    它是如何工作的? - 很简单,当我使用 GET 请求将重定向 uri 从 C 发送到 A 时,我在页面 A 上开始会话。现在我在页面 B 上进行授权(页面 B 对页面 C 一无所知!!),然后返回页面 A,在那里我具有处理授权响应所需的所有功能,获取所有需要的数据,并将其作为 json 回显。而且我只是将所有用户数据发布到页面 C 上的脚本。

    所以现在我有了客户端站点 C 上的所有信息。我可以随意使用它做任何我需要的事情。

    所以代码是这样的:

    ----- Page C -----
    
    <a href="pageA.php?redirect_uri=pageC.php">Login</a>
    
    ----- Page A -----
    
    session_start();
    
    $redirect = isset($_GET['redirect_uri']) ? $_GET['redirect_uri'] : null;
    $code = isset($_GET['code']) ? $_GET['code'] : null;
    
    if ($code) {
    $redirect = $_SESSION['redirect'];
    session_destroy();
    
    // The simple way to send data back with GET request
    header("Location:{$redirect}?code={$code}");
    
    }
    
    if (!$redirect) {
    throw new Exception('Redirect URI is required');
    }
    
    $_SESSION['redirect'] = $redirect;
    
    header('Location: PageB.php');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多