如何使用 cURL 传递授权头信息? (在 /usr/bin/curl
可执行文件中)。
http://curl.se/docs/httpscripting.html
请查看第6部分:HTTP认证。
HTTP认证
HTTP认证是告诉服务器您的用户名和密码,以便它可以验证您是否被允许执行您正在进行的请求。HTTP中使用的基本认证(curl默认使用的类型)是基于明文的,这意味着它发送的用户名和密码只是经过轻微混淆,但是在您和远程服务器之间网络上嗅探流量的任何人都可以完全读取。
告诉curl使用用户名和密码进行身份验证:
可能需要使用不同的身份验证方式(检查服务器返回的标头),然后--ntlm、--digest、--negotiate甚至--anyauth可能是适合您的选项。curl --user name:password http://www.example.com
有时,您只能通过使用HTTP代理来访问HTTP。这在各种公司似乎特别普遍。HTTP代理可能需要其自己的用户名和密码,以允许客户端通过到达互联网。要在curl中指定这些信息,请运行类似以下内容的命令:如果代理服务器需要使用NTLM方法进行身份验证,请使用--proxy-ntlm,如果需要使用Digest,则使用--proxy-digest。 如果您使用这些用户+密码选项中的任何一个但省略了密码部分,则curl将交互式提示输入密码。 请注意,当运行程序时,可能可以通过列出系统中运行的进程来查看其参数。因此,如果将它们作为明文命令行选项传递,其他用户可能会观察到您的密码。有一些方法可以规避这个问题。 值得注意的是,虽然这是HTTP身份验证的工作原理,但很多网站在提供登录等服务时并不使用此概念。有关此事的更多详细信息,请参阅下面的Web登录章节。curl --proxy-user proxyuser:proxypassword curl.haxx.se
仅做补充,以便您无需单击:
curl --user name:password http://www.example.com
如果你要尝试为 OAuth 2 发送身份验证:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
选项非常好用。 - eliocs-H Authorization: Basic <Base64EncodedCredentials>
。 - Timothy KanskiHMAC-SHA256
添加授权头,但总是出现缺少授权头的错误。 - Steven Aguilar<Base64EncodedCredentials>
,则可以使用以下命令获取已编码的凭据:cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
。有关参考,请查看https://dev59.com/l2Qn5IYBdhLWcg3wVF0w。 - David Golembiowskiecho -n
以防止包含换行符。 - braridencreds="$(printf $NAME:$PASSWORD | base64)"
- MrEBearer令牌是这样的:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
这个对我有用:
curl -H "Authorization: Bearer xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
? - jlhBearer
吗? - Daniel W.Bearer
。 - jlh(对于那些正在寻找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);
对于HTTP基本身份验证:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
替换_your_token_
和URL。
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
可以生成基本认证令牌。 - Mike D@MikeD
-H "Authorization: Basic <_your_token_>"
和 --user login:password
有同样的效果。你可以用 curl -v
命令来验证。 - vladkras在使用以下命令时请注意:
curl -H "Authorization: token_str" http://www.example.com
token_str
和Authorization
之间必须使用空格分隔,否则服务器端将无法获取HTTP_AUTHORIZATION
环境变量。
这个例子包括以下内容:
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
如果您在调用时没有令牌,那么您将需要进行两次调用,一次是获取令牌,另一次是从响应中提取令牌,请注意
grep token | cut -d, -f1 | cut -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