2010-06-15 30 views

Trả lời

259

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

Xem phần 6. Xác thực HTTP

HTTP Authentication

HTTP Authentication là khả năng bảo với máy chủ tên người dùng và mật khẩu để nó có thể xác minh rằng bạn đang được phép thực hiện yêu cầu bạn đang thực hiện . Việc xác thực cơ bản được sử dụng trong HTTP (đó là loại curl sử dụng bởi mặc định) là đồng bằngvăn bản dựa, có nghĩa là nó sẽ gửi tên truy cập và mật khẩu chỉ hơi rối loạn, nhưng vẫn hoàn toàn có thể đọc được bởi bất cứ ai nào ngửi trên mạng giữa bạn và máy chủ từ xa.

Để nói 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 

Các trang web có thể yêu cầu một phương pháp xác thực khác nhau (kiểm tra các tiêu đề trả về bởi máy chủ), và sau đó --ntlm, - thông báo, --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 ở 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 để cho phép khách hàng truy cập vào Internet. Để xác định những người có curl, chạy 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 cách sử dụng phương pháp NTLM, sử dụng --proxy-NTLM, nếu nó đòi hỏi Digest sử dụng --proxy-tiêu hóa.

Nếu bạn sử dụng bất kỳ tùy chọn nào của người dùng + mật khẩu này nhưng bỏ mật khẩu một phần, curl sẽ nhắc mật khẩu tương tác.

Lưu ý rằng khi chương trình được chạy, các thông số của chương trình có thể xem được 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ể là có thể xem mật khẩu của bạn nếu bạn chuyển cho họ dưới dạng dòng lệnh đơn giản . Có nhiều cách để phá vỡ điều này. Cần lưu ý rằng mặc dù đây là cách xác thực HTTP hoạt động, rất nhiều trang web sẽ không sử dụng khái niệm này khi chúng cung cấp thông tin đăng nhập, v.v. Xem chương Đăng nhập web bên dưới để biết thêm chi tiết về điều đó.

+1

ok nhưng làm thế nào trong php? – Vixed

+11

@Vixed Câu hỏi này rõ ràng không phải về PHP. [Có gì sai với kết quả của Google] (s)? – Oli

198

Chỉ cần thêm, do đó bạn không cần phải bấm qua:

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

hoặc nếu bạn đang cố gắng làm gửi xác thực cho OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com 
+14

Nhiều API hiện sử dụng mã thông báo ủy quyền tiêu đề. Tùy chọn '-H' rất tuyệt. – eliocs

+5

Nếu bạn sử dụng -u hoặc --user, Curl sẽ mã hóa thông tin đăng nhập vào Base64 và tạo tiêu đề như sau: '-H Ủy quyền: Cơ bản ' –

12

Hãy cẩn thận rằng khi bạn sử dụng: curl -H "Authorization: token_str" http://www.example.com

token_strAuthorization phải được tách riêng bởi không gian trắng, nếu không phía máy chủ sẽ không nhận được môi trường HTTP_AUTHORIZATION.

+0

Không đúng, nếu cần khoảng trắng, máy chủ HTTP của bạn là bị hỏng. Ngoài ra, bạn cần hai chuỗi một loại và sau đó là mã thông báo. –

46

(dành cho những ai đang tìm kiếm php-curl câu trả lời)

$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); 
87

Bearer thẻ giống như thế này:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com 
+0

@esqew - Huh? Tôi đã có cùng một câu hỏi và câu trả lời này cho tôi. –

+5

Và nếu bạn đang muốn thực hiện ủy quyền 'Cơ bản', chỉ cần hoán đổi 'Vòng' cho 'Cơ bản' –

26

này đã làm việc cho tôi:

curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/ 
7

Đối với HTTP Basic Auth :

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

thay thế _your_token_ và URL.

+0

Khi sử dụng oauth, mã thông báo Ủy quyền sẽ xuất phát từ đâu? Tôi đang cố gắng sử dụng curl để tải các tập tin từ một trang web mà tôi sử dụng một người dùng và mật khẩu nhưng nó có vẻ là không do oauth2 sử dụng. – toasteez

+0

@toasteez bạn phải đi qua luồng Oauth2 để nhận mã thông báo. Thông thường nó là một quá trình hai bước và nên được chi tiết trong tài liệu của máy chủ. – Devaroop

+6

câu trả lời hay. một người trợ giúp nhỏ 'echo -ne" : "| base64 --wrap 0' sẽ tạo ra mã thông báo auth cơ bản. –

Các vấn đề liên quan