【问题标题】:Retrieve username, password parameters passed through curl检索通过curl传递的用户名、密码参数
【发布时间】:2011-06-23 09:03:51
【问题描述】:

我正在尝试使用 curl 将用户名和密码参数发送到 url,并且我想检索它们。我将参数发送到页面,如下所示:

<?php

$curl = curl_init('http://localhost/sample.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);                         
}
?>

现在在 sample.php 页面中,我如何检索这些参数? (这里,用户名是key,密码是123456)。

我想它们必须在 $_SERVER 数组中可用,但它们不可用。

【问题讨论】:

  • 哪些参数?你不发送任何参数
  • 我在以下行中发送用户名和密码:CURLOPT_USERPWD, 'key:123456'。现在我该如何找回它们?
  • 现在知道了。我将 php 作为 CGI 运行。所以这不会直接工作。参考:besthostratings.com/articles/http-auth-php-cgi.html

标签: php authentication curl


【解决方案1】:

一些参数,如 CURLOPT_USERAGENT 在 HTTP 标头中发送,可以使用特殊的全局变量如 $_SERVER['HTTP_USER_AGENT'] 检索(请参阅 http://www.php.net/manual/de/reserved.variables.server.php)。

其他的,如CURLOPT_SSL_VERIFYPEER 仅对 CURL 是本地的,不会发送到服务器。

【讨论】:

  • 感谢您的回复...我正在发送我的请求中的参数之一,例如: curl_setopt($curl, CURLOPT_USERPWD, 'key:123456');我可以像其他参数一样抓住这个
  • 这些应该在$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW'] 中可用。
  • 嗨,我无法使用您提供的语法获取这些值。我有这个设置: curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); $_SERVER 数组仍然不包含这些索引。不过 AUTH_TYPE 在数组中可用。
  • 仅供参考,我在 Windows 上使用 Apache(与 Zend 捆绑)。
  • 知道了...在这里发表了我的评论:stackoverflow.com/questions/4942417/…
【解决方案2】:

默认情况下,cURL 发出一个 HTTP GET 请求。在这种情况下,您必须将参数附加到您正在调用的 URL:

$curl = curl_init('http://localhost/sample.php?foo=bar&baz=zoid');

sample.php$_GET['bar']$_GET['baz'] 中将分别可用。如果是POST请求,要发出,需要通过curl_setopt设置参数:

$curl = curl_init('http://localhost/sample.php');
curl_setopt($curl, CURLOPT_POSTFIELDS, 'foo=bar&baz=zoid');

【讨论】:

  • 现在如何找回我页面中的用户名和密码?
  • @dskanth 转储$_SERVER。从 cURL 通过标头传递的所有“参数”都存在于此。
  • 但是我没有得到 $_SERVER 数组中的 PHP_AUTH_USER 和 PHP_AUTH_PW 参数,但是我得到了 AUTH_TYPE。我需要在 .htpasswd 文件中设置用户名和密码并维护一个 .htaccess 文件吗?
  • @dskanth 是的,您必须将 Apache 设置为实际 询问 用户名和密码。
  • 我已经设置了一个 .htaccess 文件和一个 .htpasswd 文件。现在,每当我访问服务器上的任何页面时,都会出现一个登录对话框,尽管我输入了正确的凭据,但仍然会出现相同的对话框。
【解决方案3】:

要将参数发送到网页,您可以使用 GET 或 POST 两种方法之一

GET 是将参数附加到您正在获取的资源名称的位置

例如$url = "http://localhost/sample.php?name=" . urlencode( $value )

另一种选择是通过 POST。帖子作为信息页面发送到服务器,以便使用 curl 创建帖子

curl_setopt($ch, CURLOPT_POSTFIELDS, 'name=' . urlencode( $value ) . '&amp;name2=' . urlencode( $value2 ));

另一方面,如果您谈论的是标头,那么您可以通过 $_SERVER['headername'] 数组访问它们。

直流

【讨论】:

  • 请指定如何访问我通过 curl 发送的用户名和密码参数。仅供参考,我正在使用“任何”类型的身份验证,而不是基本的。
  • 您需要这些参数吗?如果不需要,curl 不会发送它们。请参阅此处如何使用 php php.net/manual/en/features.http-auth.php 模仿 http auth
  • 如果您使用的是网络服务器身份验证系统 (.htaccess),这些参数将不会传递给脚本,网络服务器会将它们删除
  • 我没有要求他们...您提供的链接会打开一个对话框,用于输入用户名和密码...我不能使用 curl 发送这些值吗?
【解决方案4】:

可以在全局$_SERVER数组中找到用户名和密码

$_SERVER : array
(
     ....
    'PHP_AUTH_USER' => 'the_username'
    'PHP_AUTH_PW' => 'the_password'
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多