Hướng dẫn về các yêu cầu HTTP

curl là một công cụ tuyệt vời cho phép bạn tạo các yêu cầu mạng từ dòng lệnh

curl là một công cụ dòng lệnh cho phép truyền dữ liệu qua mạng.

Nó hỗ trợ rất nhiều giao thức, bao gồm HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 và nhiều giao thức khác.

Khi nói đến gỡ lỗi các yêu cầu mạng, curl là một trong những công cụ tốt nhất mà bạn có thể tìm thấy.

Đó là một trong những công cụ mà một khi bạn biết cách sử dụng, bạn sẽ luôn quay trở lại. Bạn thân của một lập trình viên.

Nó phổ biến, nó chạy trên Linux, Mac, Windows. Tham khảo đếnhướng dẫn cài đặt chính thứcđể cài đặt nó trên hệ thống của bạn.

Sự thật thú vị: tác giả và người bảo trì curl, người Thụy Điển, đã được vua Thụy Điển trao tặng cho những đóng góp mà tác phẩm của ông (curl và libcurl) đã làm cho thế giới máy tính.

Hãy đi sâu vào một số lệnh và thao tác mà bạn có nhiều khả năng muốn thực hiện khi làm việc với các yêu cầu HTTP.

Những ví dụ đó liên quan đến việc làm việc với HTTP, giao thức phổ biến nhất.

Thực hiện yêu cầu HTTP GET

Khi bạn thực hiện một yêu cầu, curl sẽ trả về phần nội dung của phản hồi:

curl https://flaviocopes.com/

Nhận tiêu đề phản hồi HTTP

Theo mặc định, các tiêu đề phản hồi được ẩn trong đầu ra của curl. Để hiển thị chúng, hãy sử dụngiLựa chọn:

curl -i https://flaviocopes.com/

Chỉ nhận các tiêu đề phản hồi HTTP

Sử dụngItùy chọn, bạn có thể nhận đượcchỉ cócác tiêu đề chứ không phải nội dung phản hồi:

curl -I https://flaviocopes.com/

Thực hiện yêu cầu HTTP POST

CácXcho phép bạn thay đổi phương thức HTTP được sử dụng. Theo mặc định, GET được sử dụng và nó giống như cách viết

curl -X GET https://flaviocopes.com/

Sử dụng-X POSTsẽ thực hiện một yêu cầu ĐĂNG.

Bạn có thể thực hiện yêu cầu POST chuyển URL dữ liệu được mã hóa:

curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/

Trong trường hợp này,application/x-www-form-urlencodedLoại-Nội dung được gửi.

Thực hiện một yêu cầu HTTP POST gửi JSON

Thay vì đăng dữ liệu được mã hóa URL, như trong ví dụ trên, bạn có thể muốn gửi JSON.

Trong trường hợp này, bạn cần đặt tiêu đề Loại-Nội dung một cách rõ ràng, bằng cách sử dụngHLựa chọn:

curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/

Bạn cũng có thể gửi tệp JSON từ đĩa của mình:

curl -d "@my-file.json" -X POST https://flaviocopes.com/

Thực hiện một yêu cầu HTTP PUT

Khái niệm này cũng giống như đối với các yêu cầu POST, chỉ cần thay đổi phương thức HTTP bằng cách sử dụng-X PUT

Thực hiện theo một chuyển hướng

Một phản hồi chuyển hướng như 301, chỉ địnhLocationtiêu đề phản hồi, có thể được tự động theo sau bằng cách chỉ địnhLLựa chọn:

curl http://flaviocopes.com/

sẽ không tự động theo dõi đến phiên bản HTTPS mà tôi đã thiết lập để chuyển hướng đến, nhưng điều này sẽ:

curl -L http://flaviocopes.com/

Lưu trữ phản hồi vào một tệp

Sử dụngotùy chọn bạn có thể yêu cầu curl lưu phản hồi vào một tệp:

curl -o file.html https://flaviocopes.com/

Bạn cũng có thể chỉ cần lưu một tệp theo tên của nó trên máy chủ, bằng cách sử dụngOLựa chọn:

curl -O https://flaviocopes.com/index.html

Sử dụng xác thực HTTP

Nếu một tài nguyên yêu cầu Xác thực HTTP Cơ bản, bạn có thể sử dụngutùy chọn để chuyển các giá trị của người dùng: mật khẩu:

curl -u user:pass https://flaviocopes.com/

Đặt một Tác nhân người dùng khác

Tác nhân người dùng cho máy chủ biết máy khách nào đang thực hiện yêu cầu. Theo mặc định, curl sẽ gửicurl/<version>tác nhân người dùng, như:curl/7.54.0.

Bạn có thể chỉ định một tác nhân người dùng khác bằng cách sử dụng--user-agentLựa chọn:

curl --user-agent "my-user-agent" https://flaviocopes.com

Kiểm tra tất cả các chi tiết của yêu cầu và phản hồi

Sử dụng--verbosetùy chọn để làm cho đầu ra curl tất cả các chi tiết của yêu cầu và phản hồi:

curl --verbose -I https://flaviocopes.com/
*   Trying 178.128.202.129...
* TCP_NODELAY set
* Connected to flaviocopes.com (178.128.202.129) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: flaviocopes.com
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1.1
> Host: flaviocopes.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT
...

Copying any browser network request to a curl command

When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:

curl 'https://github.com/curl/curl' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.google.it/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -H 'Cookie: _octo=GH1.1.933116459.1507545550; _ga=GA1.2.643383860.1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed

More network tutorials: