Câu trả lời:
Trên nhiều hệ thống Linux / Unix, mã giả của bạn sẽ chỉ hoạt động trong bất kỳ hệ vỏ nào, mặc dù các đường dẫn của bạn phải thực sự là các URL đầy đủ.
Ví dụ, trên các hệ thống nền tảng Debian, gói libwww-perl
cài đặt ba liên kết tượng trưng đến lwp-yêu cầu đó được gọi là /usr/bin/GET
, /usr/bin/HEAD
, và /usr/bin/POST
. Những điều này làm những gì bạn mong đợi. Các phiên bản gần đây của perl-libwww-perl
gói OpenSuse đã bỏ qua các liên kết tượng trưng (có thể là lỗi), vì vậy bạn sẽ phải tự tạo chúng hoặc sử dụng lwp-request
trực tiếp. Nói chung và trong nhiều năm, có một giả định khá an toàn rằng các tệp thực thi GET, HEAD và POST có sẵn trên các hệ thống unixoid.
Tất nhiên bạn cũng có thể sử dụng curl
cho tất cả các tác vụ này, vì vậy có lẽ tôi không hiểu tại sao bạn cảm thấy rằng một dòng lệnh như bash không tương tác.
Cảm ơn câu trả lời.
Sau khi googling xung quanh, tôi thấy resty , đó là một trình bao bọc script shell xung quanh công cụ curl . Đây thực sự là những gì tôi muốn. Đó là 155 dòng script shell và khi tôi chạy nó, tôi nhận được các hàm cho GET, PUT, POST, DELETE và TÙY CHỌN. Các hàm này chỉ là các hàm bao quanh chương trình curl được tìm thấy trên đường dẫn của tôi.
Nó hoạt động như thế này trên MacOSX bash:
$ . resty
$ resty https://api.example.org
https://api.myhost.com*
$ GET /v1/o/orgname -u myusername:password
{
"createdAt" : 1347007133508,
"createdBy" : "admin",
"displayName" : "orgname",
"environments" : [ "test", "prod" ],
"lastModifiedAt" : 1347007133508,
"lastModifiedBy" : "admin",
"name" : "orgname",
"properties" : {
"propertyList" : [ ... ]
},
}
$
Dòng đầu tiên ở đó chỉ chạy các lệnh trong shell hiện tại.
Dòng tiếp theo, lệnh "resty", đặt cơ sở URL. Sau đó, bất kỳ cuộc gọi nào để NHẬN, PUT, POST ... đều tham chiếu cơ sở đó. Tôi đã đưa ra một ví dụ phát ra JSON được chỉnh sửa. Tôi nghĩ rằng nếu máy chủ của bạn phát ra JSON được rút gọn, bạn có thể in nó bằng một tập lệnh bên ngoài bằng cách dẫn đầu ra.
Có hỗ trợ cho các tùy chọn dựa trên máy chủ. Giả sử máy chủ mục tiêu của bạn là api.example.org. Tạo một tệp có tên ~ / .resty / api.example.org và chèn vào đó, các dòng xác định các đối số sẽ được truyền cho mỗi lệnh gọi curl đến máy chủ theo tên đó. Mỗi động từ http được dòng riêng. Vì vậy, chèn nội dung này trong tệp:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... có nghĩa là mỗi khi tôi thực hiện GET khi api.example.org là tên máy chủ cơ sở, lệnh curl sẽ ngầm sử dụng -u
và các đối số --write-out
hiển thị ở đó. (-u cho auth cơ bản).
Một ví dụ khác, bạn có thể chỉ định tiêu đề Chấp nhận trong tệp đó, để bạn luôn yêu cầu XML:
GET --header "Accept: application/xml"
Bất kỳ dòng lệnh curl arg được hỗ trợ trong tập tin ưu tiên đó. Tất cả các đối số curl cho máy chủ + động từ tuple cần phải đi trên một dòng duy nhất trong tệp tùy chọn.
Tiện dụng.
lftp:
$ lftp http://repo.xplico.org/pool/
cd ok, cwd=/pool
lftp repo.xplico.org:/pool> ls
drwxr-xr-x -- /
drwxr-xr-x - 2012-02-13 09:48 main
lftp repo.xplico.org:/pool> cd main
lftp repo.xplico.org:/pool/main> ls
drwxr-xr-x -- ..
drwxr-xr-x - 2012-02-13 09:48 x
Danh sách thư mục chỉ hoạt động cho các trang web gửi chỉ mục thư mục. Nhưng ngay cả khi họ không, bạn vẫn có thể sử dụng get
lệnh để nhận các tệp riêng lẻ.
Bạn có thể sử dụng Netcat .
netcat là một tiện ích unix đơn giản giúp đọc và ghi dữ liệu trên các kết nối mạng, sử dụng giao thức TCP hoặc UDP.
Dưới đây là một ví dụ để lấy trang chủ VLC
nc www.videolan.org 80
GET http://www.videolan.org/vlc/ HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 16 Oct 2012 07:34:48 GMT
Server: Apache/2.2.16 (Debian)
Content-Location: index.html
[…]
Phần còn lại của HTML là đầu ra cho bàn điều khiển. Lưu ý: Bạn cần gõ Return hai lần sau HTTP/1.0
.
Bạn có thể sử dụng tương tác shells
cả với python
hoặc perl
:
Ở Perl
$ perl -MWWW::Mechanize::Shell -eshell
(no url)> get http://cnn.com
Retrieving http://cnn.com(200)
http://edition.cnn.com/> title
CNN.com International - Breaking, World, Business, Sports, Entertainment and Video News
http://edition.cnn.com/> content
(...)
Xem perldoc WWW::Mechanize::Shell
hoặc http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
Trong Python :
$ python -i -c 'import mechanize; br = mechanize.Browser(factory=mechanize.RobustFactory())'
>>> br.open("http://xkcd.com/")
<response_seek_wrapper at 0x2824a28 whose wrapped object = <closeable_response at 0x27c2710 whose fp = <socket._fileobject object at 0x27be3d0>>>
>>> br.title()
'xkcd: Identity'
>>> print br.response().read()
(...)
Đúng, bạn có thể sử dụng tùy chọn "--config":
Chỉ định tên tệp thành -K, --config là '-' để làm cho curl đọc tệp từ stdin.
Thí dụ:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Tôi khá thích lynx để duyệt tương tác trên dòng lệnh. Đó là một trình duyệt hoàn chỉnh hơn (phù hợp với một ứng dụng ncurses) hơn là một công cụ HTML thô, mặc dù ..
Tôi đã kiểm tra các lệnh HTML thô qua SSL trước đây, mà tôi đã sử dụng openssl
, nhưng điều này chỉ cho phép một lệnh tại một thời điểm ..
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Để biết thêm thông tin về các tùy chọn s_client của openssl, hãy man s_client
chứa các chi tiết.
get
lệnh sẽ tải về tập tincat
sẽ ra tập tin vào màn hình. Để có được một http,post
bạn có thể sử dụng một cái gì đó như :quote post post.php x=1&y=z
.