2012-09-30 32 views
15

Sau khi tiêu đề -dump viết tệp, cách đọc các tiêu đề đó trở lại yêu cầu tiếp theo? Tôi muốn đọc chúng từ một tập tin vì có một số trong số chúng.curl: đọc tiêu đề từ tệp

tôi đã cố gắng tiêu chuẩn trong: cat headers | curl -v -H - ...

Tôi đang thực sự sử dụng các tính năng trong Firebug để "Copy Request Headers" và sau đó lưu những vào một tập tin. Điều này có vẻ giống như định dạng.

Trả lời

12

curl không có cách nào để "thay đổi hàng loạt" tiêu đề như vậy, thậm chí không từ tệp.

cách tiếp cận tốt nhất của bạn có lẽ là để thay vì viết một kịch bản shell mà tập hợp tất cả các tiêu đề từ các tập tin và sử dụng chúng, như:

#!/bin/sh 
while read line; do 
    args="$args -H '$line'"; 
done 
curl $args $URL 

Gọi kịch bản như thế này:

$ sh script.sh < header_file 
36

cách về điều này:

curl -v -H "$(cat headers.txt)" yourhost.com 

nơi headers.txt trông giống như

Header1: bla 
Header2: blupp 

hoạt động bằng BASH.

+0

trình trong curl 7.22.0.Tôi thêm vào một không gian để nó sẽ là 'bla bla' và tôi không thể đi lên. Lệnh này là esier để thử nghiệm với 'curl -v -H" $ (cat headers.txt) "google.com' .. Cho phép xem nếu có ai khác bình luận để đảm bảo đây là một cách an toàn để làm điều đó. Nó không phải là tài liệu. – jcalfee314

+0

Tôi đã xóa bỏ '-v' một cách rõ ràng trước đây vì tôi nghĩ đó là tiếng ồn không thêm vào câu trả lời đúng, nhưng bạn nói đúng, nó dễ dàng hơn. vì vậy tôi đã thêm nó trở lại –

+2

Nhưng nó hoạt động nhiều hơn hoặc ít hơn do trùng hợp ngẫu nhiên vì nó cung cấp cho nó dưới dạng một tiêu đề duy nhất với dòng mới được nhúng. IMHO, Một phiên bản sạch sẽ có một -H trên mỗi dòng trong tập tin headers.txt quá và để nó ra khỏi dòng lệnh. –

3
curl $(xargs -a headers.txt printf "-H '%s'") example.org 
12

Bắt đầu với curl 7.55.0 bây giờ nó có thể đọc tiêu đề từ một tập tin:

curl -H @filename 

Thật dễ dàng bây giờ.

0

Như đã trả lời bởi @dmitry-sutyagin, nếu curl của bạn ít nhất là phiên bản 7.55.0 bạn có thể sử dụng các ký hiệu @ để đọc tiêu đề từ một tập tin:

curl -H @headerfile.txt https://www.google.com/ # requires curl 7.55.0 

Nếu curl của bạn là KHÔNG 7.55.0 hoặc mới hơn, có một bản hack hữu ích:

  • Sử dụng tùy chọn -K/--config <config file> và đặt một số dòng -H/--header <header> vào tệp văn bản.

Ví dụ:

  1. curl --dump-header foo.txt https://www.google.com/
  2. Nếu cần thiết, dos2unix foo.txt
  3. Chuyển đổi các tập tin để -H 'header' dòng, bằng tay hoặc với một kịch bản:

    cat foo.txt | 
        awk '$1 == "Set-Cookie:"' | 
        perl -ne "chomp; next if /^\\s*\$/; if (/'/) { warn; next } print \"-H '\$_'\\n\";" | 
        tee headerfile.txt 
    

    đầu ra sức này một cái gì đó như:

    -H 'Set-Cookie: 1P_JAR=2018-02-13-08; [...]' 
    -H 'Set-Cookie: NID=123=n7vY1W8IDElvf [...]' 
    
  4. curl --config headerfile.txt https://www.google.com/

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