cURL的选项“-u”是什么意思?

53

来自 cUrl 文档:

-u, --user <user:password;options>

Specify the user name, password and optional login options to use for server authentication. Overrides -n, --netrc and --netrc-optional.

如何进行翻译,也就是我如何在服务器上获取并认证用户:它们在GET参数还是POST参数中?

语言不重要,思想很重要。

3个回答

70

这完全取决于身份验证方法,但对于最常见的几种——基本认证数字摘要认证,它可以使用临时HTTP头来工作。以下是使用基本认证的示例:

curl -u john:pwd http://foo.com/misc

这将使用相应的标头执行GET请求:

GET /misc HTTP/1.1
Authorization: Basic am9objpwd2Q=
User-Agent: curl/7.33.0
Host: foo.com
Accept: */*

Authorization头包含服务器应该解析、进行base64解码并使用的身份验证数据。相同的头将在POST请求中设置。您可以使用像httpbin(1)这样的服务轻松测试它(请参见/basic-auth/:user/:passwd端点)。

摘要认证有点更加复杂,但也可使用HTTP头来工作:

  • 客户端首先发送其请求,服务器回复一个401 Unauthorized,其中包括一个WWW-Authenticate头,还有一个待解决的挑战,
  • 客户端解决了这个挑战,并发送另一个请求,其中包括响应信息,该响应信息被包含在Authorization头中,必须在服务器端进行解析和验证。

[1]: base64("john:pwd") -> am9objpwd2Q=


为什么在curl的命令行中要两次使用john:pwd? - Alan Coromano
因为这就是 httpbin 的工作方式:它是一个简单的服务,用于测试HTTP客户端等。它提供了测试基本和摘要身份验证的端点,前提是您明确指定要使用的用户名和密码。但是您可以忘记这部分,因为这是特定于此测试服务的。我已经更新了我的答案以避免任何歧义。 - deltheil
但我的第一个问题是如何在服务器上获取用户名和密码。 - Alan Coromano
再次强调,这完全取决于认证方案。使用基本身份验证时,您必须解析Authorization标头,对编码部分进行base64解码并提取用户和密码。以下是Rails的示例。 - deltheil

14

哇!从来不知道这个。这非常强大。 - Pratik Bhattacharya

5
在PHP/nginx中,它作为一个Base64编码的字符串在这个数组元素中可用。它适用于GET和POST(curl -X POST)方法。
$_SERVER['HTTP_AUTHORIZATION']

请求:

curl http://127.0.0.1:8080/test.php  -u arun:12345

$_SERVER['HTTP_AUTHORIZATION']中的值:

Basic YXJ1bjoxMjM0NQ==

感谢您的提问:在头部中,“-u”表示“Basic”。例如,在Postman中,我选择了身份验证下的“Basic Auth”,如果只提供令牌,则将其添加为“用户名”,并将密码留空。这将添加一个带有“Basic <hashed token>”值的“Authorization”头。 - Denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接