Answers:
http://curl.haxx.se/docs/httpscripting.html
请参阅第6部分。HTTP身份验证
HTTP认证
HTTP身份验证可以告诉服务器您的用户名和密码,以便可以验证是否允许您执行正在执行的请求。HTTP中使用的基本身份验证(默认为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。
如果您使用这些user + password选项中的任何一个,但忽略了密码部分,curl将交互提示输入密码。
请注意,在运行程序时,列出系统正在运行的进程时可能会看到其参数。因此,如果您将其他密码作为普通的命令行选项传递给其他用户,则他们可能会看到您的密码。有一些方法可以避免这种情况。
值得注意的是,虽然这是HTTP身份验证的工作方式,但许多网站在提供登录名等时将不会使用此概念。有关此内容的更多详细信息,请参见下面的“ Web登录”一章。
只需添加即可,您无需点击即可:
curl --user name:password http://www.example.com
或者,如果您尝试发送OAuth 2的身份验证:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
选项很棒。
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
总是会得到缺少授权标头的错误
<Base64EncodedCredentials>
@ timothy-kansaki所提到的,则可以使用以下命令获取编码的凭证:cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
。仅供参考,请参阅stackoverflow.com/questions/16918602/...
(对于那些正在寻找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
将生成基本的身份验证令牌。
-H "Authorization: Basic <_your_token_>"
作用与相同--user login:password
。您可以通过curl -v
使用时请注意:
curl -H "Authorization: token_str" http://www.example.com
token_str
并且Authorization
必须用空格隔开,否则服务器端将无法获得HTTP_AUTHORIZATION
环境。
如果在进行呼叫时没有令牌,则必须进行两次呼叫,一个要获取令牌,而另一个要从响应中提取令牌,请注意
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