Câu trả lời:
http://curl.haxx.se/docs/httpscripting.html
Xem phần 6. Xác thực HTTP
Xác thực HTTP
Xác thực HTTP là khả năng cho máy chủ biết tên người dùng và mật khẩu của bạn để nó có thể xác minh rằng bạn được phép thực hiện yêu cầu bạn đang thực hiện. Xác thực cơ bản được sử dụng trong HTTP (loại curl sử dụng theo mặc định) là văn bản thuần túy , có nghĩa là nó chỉ gửi tên người dùng và mật khẩu hơi bị xáo trộn, nhưng vẫn có thể đọc được hoàn toàn bởi bất kỳ ai đánh hơi trên mạng giữa bạn và máy chủ từ xa.
Để báo cho curl sử dụng người dùng và mật khẩu để xác thực:
curl --user name:password http://www.example.com
Trang web có thể yêu cầu một phương thức xác thực khác (kiểm tra các tiêu đề được máy chủ trả về) và sau đó --ntlm, --digest, --negotiate hoặc thậm chí --anyauth có thể là các tùy chọn phù hợp với bạn.
Đôi khi quyền truy cập HTTP của bạn chỉ khả dụng thông qua việc sử dụng proxy HTTP. Điều này dường như đặc biệt phổ biến tại các công ty khác nhau. Một proxy HTTP có thể yêu cầu người dùng và mật khẩu riêng của mình để cho phép khách hàng truy cập Internet. Để chỉ định những người có curl, hãy chạy một cái gì đó như:
curl --proxy-user proxyuser:proxypassword curl.haxx.se
Nếu proxy của bạn yêu cầu xác thực được thực hiện bằng phương pháp NTLM, hãy sử dụng --proxy-ntlm, nếu nó yêu cầu Digest sử dụng --proxy-digest.
Nếu bạn sử dụng bất kỳ tùy chọn người dùng + mật khẩu nào nhưng bỏ phần mật khẩu, curl sẽ nhắc nhập mật khẩu một cách tương tác.
Xin lưu ý rằng khi một chương trình được chạy, các tham số của nó có thể được nhìn thấy khi liệt kê các quy trình đang chạy của hệ thống. Do đó, những người dùng khác có thể xem mật khẩu của bạn nếu bạn chuyển chúng dưới dạng tùy chọn dòng lệnh đơn giản. Có nhiều cách để phá vỡ điều này.
Điều đáng chú ý là mặc dù đây là cách HTTP xác thực hoạt động, rất nhiều trang web sẽ không sử dụng khái niệm này khi họ cung cấp thông tin đăng nhập, v.v. Xem thêm chương Đăng nhập web bên dưới để biết thêm chi tiết về điều đó.
Chỉ cần thêm để bạn không phải nhấp qua:
curl --user name:password http://www.example.com
hoặc nếu bạn đang cố gửi xác thực cho OAuth 2:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
tùy chọn là tuyệt vời.
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
luôn gặp lỗi về tiêu đề ủy quyền bị thiếu
<Base64EncodedCredentials>
được đề cập bởi @ timothy-kansaki, bạn có thể nhận thông tin được mã hóa bằng lệnh : cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
. Để tham khảo, xem stackoverflow.com/questions/16918602/
Mã thông báo mang giống như thế này:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
(dành cho những người đang tìm kiếm câu trả lời 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);
Điều này làm việc cho tôi:
curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
sao?
Bearer
Bearer
.
Đối với Xác thực cơ bản HTTP:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
thay thế _your_token_
và URL.
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
sẽ tạo mã thông báo xác thực cơ bản.
-H "Authorization: Basic <_your_token_>"
có tác dụng tương tự như --user login:password
. Bạn có thể kiểm tra nó vớicurl -v
Hãy cẩn thận khi bạn sử dụng:
curl -H "Authorization: token_str" http://www.example.com
token_str
và Authorization
phải được phân tách bằng khoảng trắng, nếu không phía máy chủ sẽ không nhận được HTTP_AUTHORIZATION
môi trường.
Nếu bạn không có mã thông báo tại thời điểm cuộc gọi được thực hiện, Bạn sẽ phải thực hiện hai cuộc gọi, một cuộc gọi để nhận mã thông báo và cuộc gọi khác để trích xuất mã thông báo, hãy chú ý đến
mã thông báo grep | cắt -d, -f1 | cắt -d \ "-f4
vì nó là phần liên quan đến việc trích xuất mã thông báo từ phản hồi.
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()
Sau khi trích xuất mã thông báo, bạn có thể sử dụng mã thông báo để thực hiện các cuộc gọi tiếp theo như sau.
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