首页 > 解决方案 > 如何使用 curl 和 php 进行网站授权?

问题描述

我正在尝试使用登录名和密码实现简单的授权。我得到一个 cookie,但不确定是否授权(如何检查?),我也在授权后尝试重定向,但结果,在我的代码尝试重定向后,我收到错误 404(followlocation,true)。

这是我的php代码

尝试重定向但发生 404。

  $curl = curl_init($url);

  curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  $result = curl_exec($curl);

  echo $result;
  curl_close($curl);

这里正在尝试授权,不确定它是否有效(但我得到 cookie 并且在标题中我得到 200 OK)

$loginData = [
    urlencode('j_username') => 'someName',
    urlencode('j_password') => 'somePassword'
];


$curl = curl_init($url);

curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 2);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($loginData));

curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/authCookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/authCookie.txt');

$result = curl_exec($curl);

echo $result;
curl_close($curl);

另外,我使用 urlencode 但不确定是否以正确的方式使用它(我在 curl 中使用它,例如 $curl --location --request POST ' http://someFullName ' \ --data-urlencode 'j_username=someUsername' \ --data-urlencode 'j_password=somePassword')

标签: phpcurl

解决方案


对于身份验证,您可以使用 http 基本身份验证,它非常简单地用于客户端和服务器,在这种情况下,客户端代码将如下所示:

<?php

const COOKIE_FILE = '/tmp/authCookie';

$host = 'localhost';
$username = 'login';
$password = 'pass';

$ch = curl_init($host);

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERPWD, sprintf('%s:%s', $username, $password));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);

$return = curl_exec($ch);
curl_close($ch);

关于您的 4xx 错误,我认为您的服务器有问题,对于测试重定向,您可以执行以下操作:

<?php
//stable route with redirect
$host = 'https://bitly.is/EnterpriseButton';
$userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:76.0) Gecko/20100101 Firefox/76.0';

$curl = curl_init($host);

curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $host);
//with enabled followlocation
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$result = curl_exec($curl);

curl_close($curl);

var_dump($result);

$curl = curl_init($host);

curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $host);
//with disabled followlocation
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);
$result = curl_exec($curl);

curl_close($curl);

var_dump($result);

并且为了检查身份验证工作,您可以使用 curl 中的 cookie 通过浏览器进行身份验证


推荐阅读