Câu hỏi Làm thế nào để gửi một tiêu đề bằng cách sử dụng một yêu cầu HTTP thông qua một cuộc gọi curl?


Tôi muốn gửi một tiêu đề đến máy chủ Apache của tôi trên một hộp Linux. Làm thế nào tôi có thể đạt được điều này thông qua một cuộc gọi curl?


1065
2017-12-10 16:38


gốc


Có một cách hay để tìm hiểu cách sử dụng curl cho các yêu cầu http bằng các ví dụ. Tải xuống phiên bản Postman mới nhất, thực hiện bất kỳ cấu hình yêu cầu http nào như bạn muốn ở cấp độ giao diện người dùng (đăng, đặt, lấy .. ví dụ, với tiêu đề và thân json) và sau đó nhấp vào "tạo mã" và chọn tùy chọn "curl" . Nó cung cấp cho bạn dòng lệnh tương đương. - Vinicius Lima


Các câu trả lời:


man curl:

   -H/--header <header>
          (HTTP)  Extra header to use when getting a web page. You may specify
          any number of extra headers. Note that if you should  add  a  custom
          header that has the same name as one of the internal ones curl would
          use, your externally set header will be used instead of the internal
          one.  This  allows  you  to make even trickier stuff than curl would
          normally do. You should not replace internally set  headers  without
          knowing  perfectly well what you're doing. Remove an internal header
          by giving a replacement without content on the  right  side  of  the
          colon, as in: -H "Host:".

          curl  will  make sure that each header you add/replace get sent with
          the proper end of line marker, you should thus not  add  that  as  a
          part  of the header content: do not add newlines or carriage returns
          they will only mess things up for you.

          See also the -A/--user-agent and -e/--referer options.

          This option can be used multiple times to add/replace/remove  multi-
          ple headers.

Thí dụ:

curl --header "X-MyHeader: 123" www.google.com

Bạn có thể xem yêu cầu curl được gửi bằng cách thêm -v Tùy chọn.


1603
2017-12-10 16:41



Đó là một trang người đàn ông đáng tiếc không bao gồm dòng duy nhất mà bạn quan tâm: ví dụ. - Martin Konicek
@MartinKonicek Tôi ước tôi có thể upvote bạn 1000 lần. Tôi tiếp tục quay trở lại câu hỏi này và câu trả lời của bạn hơn và hơn và hơn nữa, nếu các trang của người đàn ông có hiệu quả, tôi sẽ không phải làm thế! - Henley Chiu
Nếu bạn muốn gửi nhiều tiêu đề, hãy sử dụng nhiều hơn một tiêu đề - được rồi, curl sẽ phân tích cú pháp mỗi tiêu đề khác nhau. Không có cách nào để phân tách các tiêu đề bên trong cùng tham số -header. ví dụ: curl --header "Chấp nhận: javascript" --header "test: hello" -v www.google.com - Hatoru Hansou
@MartinKonicek Đó là một trong những bình luận được đánh giá cao nhất mà tôi từng thấy. - Nigralbus
@MartinKonicek và những người khác: Tôi khuyên bạn nên sử dụng tiltr utiltiy (brew, etc install tldr). Ví dụ duy nhất của nó. ví dụ: "- Gửi yêu cầu với tiêu đề bổ sung, sử dụng phương thức HTTP tùy chỉnh: curl -H 'X-My-Tiêu đề: 123' -X PUT example.com ";


ĐƯỢC:

với JSON:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource

với XML:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

BÀI ĐĂNG:

Để đăng dữ liệu:

curl --data "param1=value1&param2=value2" http://hostname/resource

Để tải lên tệp:

curl --form "fileupload=@filename.txt" http://hostname/resource

Bài đăng HTTP RESTful:

curl -X POST -d @filename http://hostname/resource

Để đăng nhập vào một trang web (auth):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

303
2017-10-07 05:15



có nghĩa là gì bởi @filename cho bài RESTful? bạn đang gửi một tệp đến một máy chủ REST? Điều đó có vẻ kỳ lạ với tôi - JesseBoyd
Đối với những người đến sau, những người có thể tự hỏi điều tương tự ... @ ký hiệu là cách đọc dữ liệu để gửi tới máy chủ từ một tệp, thay vì nhập nội dung vào yêu cầu curl. Bạn không POST một tập tin mỗi lần, bạn đang POST nội dung của tập tin như là cơ thể của yêu cầu POST của bạn. - f1dave
Câu trả lời chi tiết hơn tại đây: stackoverflow.com/questions/14978411/… :) - Amith Koujalgi


Trong PHP:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));

hoặc bạn có thể đặt nhiều:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));

259
2018-04-03 09:49



@ James nó hoạt động tốt trong một số trường hợp, nhưng trong những người khác CURL gửi một tiêu đề bổ sung "Mong đợi: 100-tiếp tục" - bất kỳ ý tưởng về làm thế nào để loại bỏ nó? - coding_idiot
@XCoder: Vui lòng xem tools.ietf.org/html/rfc2616#section-8.2.3 - hakre
@coding_idiot: Bạn có thể vượt qua "Mong đợi:" trong mảng giá trị tiêu đề để vô hiệu hóa nó. Ví dụ: curl_setopt ($ ch, CURLOPT_HTTPHEADER, mảng ('HeaderName: HeaderValue', 'Expect:')); - ether
OP không nói gì về PHP nghĩ - hanshenrik
Tên tiêu đề cao hơn với dấu gạch dưới và HTTP_ được đặt trước. Ví dụ: "mã thông báo bảo vệ" trở thành "HTTP_PROTECTION_TOKEN". - Bimal Poudel


Sử dụng -H or --header.


46
2017-12-10 16:41



-H Tùy chọn có thể được sử dụng trong dấu nhắc lệnh, như: curl -H "pwd: 123" localhost / test.php - shasi kanth
Cảm ơn. Ngắn gọn, súc tích và được bao phủ bởi liên kết tới tài liệu. Tuy nhiên, liên kết đã lỗi thời rồi, liên kết mới bây giờ là curl.haxx.se/docs/manpage.html#-H - Oleksii Kyslytsyn


GET (nhiều tham số):

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"

hoặc là

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"

hoặc là

curl  "http://localhost:3000/action?result1=gh&result2=ghk"

hoặc là

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"

39
2017-10-14 09:44



Cảm ơn. Tôi đã không nhận ra các trích dẫn bắt buộc cho loại url này. - remat_br


Tôi đã chuyển từ curl sang Httpie; cú pháp trông giống như sau:

http http://myurl HeaderName:value

7
2017-09-02 20:39





Trong trường hợp bạn muốn gửi tiêu đề tùy chỉnh, bạn có thể làm theo cách này:

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk

4
2017-08-09 10:27