ลองนึกภาพบางสิ่งเช่นนี้:
$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here....
มีเครื่องมือที่ให้ฉันทำอย่างนั้นหรือไม่?
ลองนึกภาพบางสิ่งเช่นนี้:
$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here....
มีเครื่องมือที่ให้ฉันทำอย่างนั้นหรือไม่?
คำตอบ:
ในระบบ Linux / Unix หลายระบบ pseudocode ของคุณจะทำงานในเชลล์ใด ๆ แม้ว่าเส้นทางของคุณควรเป็น URL เต็ม
ยกตัวอย่างเช่นในระบบ Debian ตามแพคเกจlibwww-perl
ติดตั้งสาม symlinks จะ LWP คำขอซึ่งเรียกว่า/usr/bin/GET
, และ/usr/bin/HEAD
/usr/bin/POST
สิ่งเหล่านี้ทำในสิ่งที่คุณคาดหวัง perl-libwww-perl
แพ็คเกจล่าสุดของ OpenSuse ละเว้น symlink (ซึ่งอาจเป็นจุดบกพร่อง) ดังนั้นคุณจะต้องสร้างมันเองหรือใช้lwp-request
โดยตรง โดยทั่วไปและเป็นเวลาหลายปีเป็นข้อสันนิษฐานที่ค่อนข้างปลอดภัยว่า GET, HEAD และ POST สามารถใช้งานได้กับระบบยูนิกซ์
แน่นอนว่าคุณสามารถใช้curl
งานเหล่านี้ได้ทั้งหมดดังนั้นบางทีฉันอาจไม่เข้าใจว่าทำไมคุณถึงรู้สึกว่าเชลล์บรรทัดคำสั่งเช่น bash ไม่ใช่แบบโต้ตอบ
ขอบคุณสำหรับคำตอบ
หลังจาก googling ไปรอบ ๆ ฉันพบว่าrestyซึ่งเป็น wrapper เชลล์สคริปต์รอบ ๆเครื่องมือcurl นี่คือสิ่งที่ฉันต้องการจริงๆ มันคือเชลล์สคริปต์จำนวน 155 บรรทัดและเมื่อฉันรันมันฉันจะได้รับฟังก์ชั่นสำหรับ GET, PUT, POST, DELETE และ OPTIONS ฟังก์ชั่นเหล่านี้เป็นเพียงการล้อมรอบโปรแกรม curl ที่พบในเส้นทางของฉัน
มันใช้งานได้เช่นนี้บน 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" : [ ... ]
},
}
$
บรรทัดแรกมีเพียงรันคำสั่งในเชลล์ปัจจุบัน
บรรทัดถัดไปคำสั่ง "resty" ตั้งค่าฐาน URL หลังจากนั้นมีการเรียก GET, PUT, POST ... โดยอ้างอิงฐานนั้น ฉันแสดงตัวอย่างที่ปล่อย JSON ที่สวยงาม ฉันคิดว่าถ้าเซิร์ฟเวอร์ของคุณปล่อย JSON ขนาดเล็กคุณสามารถพิมพ์ได้ด้วยสคริปต์ภายนอกโดยการส่งออกไปป์ไลน์
มีการสนับสนุนสำหรับการตั้งค่าตามโฮสต์ สมมติว่าโฮสต์เป้าหมายของคุณคือ api.example.org หยุดแฟ้มที่เรียกว่า ~ / .resty / api.example.org และใส่เข้าไปในนั้นบรรทัดที่ระบุอาร์กิวเมนต์ที่ควรถูกส่งผ่านไปยังทุกการเรียก curl ไปยังโฮสต์ด้วยชื่อนั้น แต่ละกริยา http ได้รับบรรทัดของตนเอง ดังนั้นการแทรกเนื้อหานี้ในไฟล์:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... หมายความว่าทุกครั้งที่ฉันทำ GET เมื่อ api.example.org เป็นชื่อโฮสต์ฐานคำสั่ง curl จะใช้-u
และ--write-out
args แสดงโดยปริยาย (-u สำหรับการรับรองความถูกต้องขั้นพื้นฐาน)
เป็นอีกตัวอย่างหนึ่งคุณสามารถระบุส่วนหัวยอมรับในไฟล์นั้นเพื่อให้คุณร้องขอ XML:
GET --header "Accept: application/xml"
arg บรรทัดคำสั่งใด ๆ ที่สนับสนุนได้รับการสนับสนุนในไฟล์การตั้งค่าที่ Curl args สำหรับ host + verb tuple จำเป็นต้องอยู่บนบรรทัดเดียวในไฟล์ preferences
มีประโยชน์
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
รายชื่อไดเรกทอรีใช้งานได้กับเว็บไซต์ที่ส่งดัชนีไดเรกทอรีเท่านั้น แต่แม้ว่าพวกเขาจะไม่ได้คุณยังสามารถใช้get
คำสั่งเพื่อรับไฟล์แต่ละไฟล์
netcat เป็นยูทิลิตี้ยูนิกซ์ง่าย ๆ ที่อ่านและเขียนข้อมูลผ่านการเชื่อมต่อเน็ตเวิร์กโดยใช้โปรโตคอล TCP หรือ UDP
นี่คือตัวอย่างเพื่อดึงหน้าแรกของ 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
[…]
ส่วนที่เหลือของ HTML จะถูกส่งออกไปยังคอนโซล หมายเหตุ: คุณต้องพิมพ์Return ครั้งที่สองHTTP/1.0
หลังจากที่
คุณสามารถใช้การโต้ตอบshells
ทั้งกับpython
หรือ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
(...)
ดูperldoc WWW::Mechanize::Shell
หรือhttp://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
ใน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()
(...)
ใช่คุณสามารถใช้ตัวเลือก "--config":
ระบุชื่อไฟล์เป็น -K, --config เป็น '-' เพื่อให้ curl อ่านไฟล์จาก stdin
ตัวอย่าง:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
ฉันชอบคมสำหรับการเรียกดูแบบโต้ตอบบนบรรทัดคำสั่ง มันเป็นเบราว์เซอร์ที่เต็มรูปแบบ (ซึ่งเหมาะกับแอปพลิเคชัน ncurses) มากกว่าเครื่องมือ HTML แบบดิบ ๆ ..
ฉันได้ทดสอบคำสั่ง HTML ดิบผ่าน SSL มาก่อนซึ่งฉันใช้openssl
แต่จะอนุญาตเพียงหนึ่งคำสั่งต่อครั้ง ..
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือก s_client openssl man s_client
มีรายละเอียด
get
คำสั่งจะดาวน์โหลดไฟล์cat
ออกจะไฟล์ไปยังหน้าจอ ในการรับ httppost
คุณสามารถใช้สิ่งquote post post.php x=1&y=z
ต่อไปนี้: