516

如何使用 cURL 传递授权标头?(可执行文件/usr/bin/curl)。

4

12 回答 12

479

http://curl.se/docs/httpscripting.html

请参阅第 6 部分。HTTP 身份验证

HTTP 身份验证

HTTP 身份验证能够告诉服务器您的用户名和密码,以便它可以验证您是否被允许执行您正在执行的请求。HTTP 中使用的 Basic 身份验证(默认情况下 curl 使用的类型)是基于 文本的,这意味着它发送的用户名和密码只是略微混淆,但仍然可以被任何在你和远程服务器之间的网络上嗅探的人完全读取。

告诉 curl 使用用户和密码进行身份验证:

curl --user name:password http://www.example.com

该站点可能需要不同的身份验证方法(检查服务器返回的标头),然后 --ntlm、--digest、--negotiate 甚至 --anyauth 可能是适合您的选项。

有时您的 HTTP 访问只能通过使用 HTTP 代理获得。这似乎在各个公司中尤为常见。HTTP 代理可能需要其自己的用户名和密码才能允许客户端访问 Internet。要使用 curl 指定那些,请运行以下命令:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

如果您的代理需要使用 NTLM 方法完成身份验证,请使用 --proxy-ntlm,如果需要摘要使用 --proxy-digest。

如果您使用这些用户+密码选项中的任何一个,但省略了密码部分,curl 将交互提示输入密码。

请注意,当程序运行时,在列出系统正在运行的进程时,可能会看到它的参数。因此,如果您将密码作为纯命令行选项传递,其他用户可能会看到您的密码。有办法规避这一点。

值得注意的是,虽然这是 HTTP 身份验证的工作原理,但很多网站在提供登录等时不会使用此概念。有关详细信息,请参阅下面的 Web 登录章节。

于 2010-06-15T10:31:56.283 回答
415

只需添加,这样您就不必点击:

curl --user name:password http://www.example.com

或者如果您尝试为 OAuth 2 发送身份验证:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
于 2011-12-31T18:42:37.940 回答
223

不记名令牌如下所示:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
于 2014-07-30T12:14:38.830 回答
103

这对我有用:

curl -H "Authorization: Bearer xxxxxxxxxxxxxx" https://www.example.com/
于 2015-10-07T02:43:02.017 回答
71

(对于那些正在寻找php-curl答案的人)

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);
于 2014-06-04T19:13:55.893 回答
26

对于 HTTP 基本身份验证:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

替换_your_token_和 URL。

于 2016-05-02T10:13:07.427 回答
17

使用时请注意: curl -H "Authorization: token_str" http://www.example.com

token_str并且Authorization必须用空格隔开,否则服务器端将无法获取HTTP_AUTHORIZATION环境。

于 2012-04-12T12:35:06.340 回答
9

如果您在调用时没有令牌,您将不得不进行两次调用,一个是获取令牌,另一个是从响应中提取令牌,注意

grep 令牌 | 切-d,-f1 | 剪切 -d\" -f4

因为它是处理从响应中提取令牌的部分。

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

提取令牌后,您可以使用令牌进行后续调用,如下所示。

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
于 2018-03-22T06:56:42.040 回答
7

此示例包括以下内容:

curl -X POST -H "Content-Type: application/json" -d '{"name”:”Johnny B. Goode”, "email”:”johnny.b.goode@mail.com"}' -H "Authorization: Bearer $(echo -n  Guitar Maestro | base64)" https://url-address.com 

于 2021-05-24T21:29:52.593 回答
4

curl7.61.0 开始,您可以使用该--oauth2-bearer <token>选项设置正确的承载授权标头。

于 2021-03-05T15:20:17.913 回答
0

一个简单的例子是使用授权转换为base64的参数

curl -XPOST 'http://exemplo.com/webhooks?Authorization=Basic%20dGVzdDoxMjM0NTYK'

于 2021-06-10T22:18:39.470 回答
0

对于那些进行基于令牌的身份验证的人......请确保您这样做:

curl -H "AuthToken:"

反而 !!

于 2022-03-03T16:29:54.870 回答