gpt4 book ai didi

php - 使用 Zend 进行 curl http 身份验证

转载 作者:可可西里 更新时间:2023-11-01 16:48:18 25 4
gpt4 key购买 nike

我使用 Zend Rest Controller 开发 Web 服务,现在我需要在用户访问我的页面之前对他们进行身份验证。

为此,我计划使用带有 curl 的 HTTP 身份验证,如下所示:

curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); 

我这样称呼那个 curl 页面:

curl -u myusername:mypassword http://localhost/controller/action/page.xml

我有一个很大的疑问。

我需要将用户名和密码存储在 .htpasswd 文件中吗?如果是这样,我需要如何检索参数并验证它们?

最佳答案

如果您使用 .htaccess,网络服务器将默默地为您处理所有事情。您可以假设(除非您犯了错误)此人已获得授权。

但是如果您想使用 http 身份验证并获取用户名和密码以在您自己的登录系统中使用,那么您需要编写被调用的脚本,如下所示。

http://php.net/manual/en/features.http-auth.php

除了通过用户名和密码发送外,curl 确实与它无关。它只是充当 http 客户端,就像网络浏览器一样。

您如何执行身份验证归结为您要实现的目标。 http auth 是一个简单的身份验证系统。

直流

我给你的链接告诉你如何去做。您正在调用的页面必须发回身份验证请求,否则 curl 将不会转发身份验证详细信息。

如果您使用 .htaccess 和 .htpasswd 文件,您将看不到身份验证,因为网络服务器将删除这些 header 。如果您使用的是像我提供的链接中那样的自定义 http 身份验证,那么您只能在发送身份验证请求后才能访问它们,这意味着第一次加载页面时您将无法访问它们。

我的意思是.. 首先 curl 请求没有任何凭证的页面,如果它得到页面然后它停止,如果它收到凭证请求然后发送它们。

这意味着如果您希望 http://localhost/controller/action/page.xml 查看凭据,则它必须要求提供这些凭据。如果它看起来像一个静态页面,那么它不会要求提供凭据。

你是不是要输入 http://localhost/controller/action/page.php

直流

过程是这样的...

curl                   ---> page.php (first request)
curl <--- page.php (first reply) "Please identify yourself" ('401 unauthorised' http code)
curl username:password ---> page.php (second request now includes user auth)
curl <--- page.php (second reply) ok here is the page (if id succesfull)

好的,正如 promise 的一些工作示例

首先创建2个php脚本

auth.php 是我在上面发布的链接中提供的示例的修改副本

<?php

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo "User name and password is required. Please try again.\n";
} else {
// we now have access to the user and password :)
echo "Hello {$_SERVER['PHP_AUTH_USER']}\n";
echo "You entered {$_SERVER['PHP_AUTH_PW']} as your password.\n";
}

?>

curlfetch.php 是您其他帖子中脚本的副本

<?php

$curl = curl_init('http://localhost/auth.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'key:123456');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Sample Code');

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

if($resultStatus['http_code'] == 200) {
echo $response;
} else {
echo 'Call Failed '.print_r($resultStatus);
}
?>

在您的服务器上创建并保存这些脚本

现在在没有密码的情况下测试脚本 1

curl http://localhost/auth.php

这导致...

User name and password is required. Please try again.

现在尝试输入密码

curl -u user:pass http://localhost/auth.php

这导致...

Hello user
You entered pass as your password.

现在尝试第二个脚本,注意我们不提供脚本中提供的用户名或密码

curl http://localhost/curlfetch.php 

这导致...

Hello key
You entered 123456 as your password.

现在作为引用尝试从浏览器调用这两个脚本

直流

关于php - 使用 Zend 进行 curl http 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com