Yanıtlar:
Birçok Linux / Unix sisteminde, yollarınız gerçekten tam URL'ler olsa da, sahte kodunuz herhangi bir kabukta çalışacaktır.
Örneğin, Debian tabanlı sistemlerde, paket libwww-perl
olarak adlandırılır LWP-isteğine üç sembolik yükler /usr/bin/GET
, /usr/bin/HEAD
ve /usr/bin/POST
. Bunlar beklediğiniz şeyi yapar. OpenSuse perl-libwww-perl
paketinin son sürümleri sembolik bağlantıları atlar (muhtemelen bir hatadır), bu yüzden bunları kendiniz oluşturmanız veya lwp-request
doğrudan kullanmanız gerekir . Genellikle ve uzun yıllar boyunca, GET, HEAD ve POST yürütülebilir dosyalarının unixoid sistemlerde mevcut olduğu oldukça güvenli bir varsayımdır.
Tabii ki curl
tüm bu görevler için de kullanabilirsiniz , bu yüzden belki neden bash gibi bir komut satırı kabuğunun etkileşimli olmadığını düşündüğünüzü anlamıyorum.
Cevaplar için teşekkürler.
Etrafta dolaştıktan sonra , curl aracının etrafında bir kabuk komut dosyası sarıcı olan resty buldum . Gerçekten istediğim bu. 155 satır kabuk betiği ve çalıştırdığımda GET, PUT, POST, DELETE ve OPTIONS işlevlerini alıyorum. Bu işlevler sadece yolumda bulunan kıvırma programının etrafındaki sarmalayıcılardır.
MacOSX bash'da şu şekilde çalışır:
$ . 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" : [ ... ]
},
}
$
Buradaki ilk satır, geçerli kabuktaki komutları çalıştırır.
Sonraki satır olan "resty" komutu URL tabanını ayarlar. Daha sonra, GET, PUT, POST ... 'e yapılan her çağrı dolaylı olarak bu tabana referansta bulunur. Hazırlanmış JSON yayan bir örnek gösterdim. Sunucunuz küçültülmüş JSON yayarsa, çıktıyı borulandırarak harici bir komut dosyasıyla güzel bir şekilde yazdırabilirsiniz.
Ana bilgisayar tabanlı tercihler için destek var. Hedef barındırıcınızın api.example.org olduğunu varsayalım. ~ / .Resty / api.example.org adlı bir dosyayı oluşturun ve oraya, ana bilgisayara bu adla her curl çağrısına iletilmesi gereken bağımsız değişkenleri belirten satırlar ekleyin. Her http fiili kendi satırını alır. Yani, bu içeriği dosyaya ekleyerek:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... api.example.org temel ana bilgisayar adı olduğunda her GET yaptığımda, curl komutunun dolaylı olarak burada gösterilen -u
ve --write-out
argümanlarını kullanacağı anlamına gelir . (-u temel kimlik doğrulaması için).
Başka bir örnek olarak, her zaman XML istemek için bu dosyadaki Kabul üstbilgisini belirtebilirsiniz:
GET --header "Accept: application/xml"
Bu tercihler dosyasında herhangi bir curl komut satırı argümanı desteklenir. Host + fiil grubu için tüm curl argümanlarının tercihler dosyasında tek bir satıra gitmesi gerekir.
Kullanışlı.
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
Dizin listeleri yalnızca dizin dizinleri gönderen web siteleri için çalışır. Ancak bunu yapmasalar bile get
tek tek dosyaları almak için komutu kullanabilirsiniz .
Netcat'i kullanabilirsiniz .
netcat, TCP veya UDP protokolünü kullanarak ağ bağlantıları üzerinden veri okuyan ve yazan basit bir unix yardımcı programıdır.
İşte VLC ana sayfasını almak için bir örnek
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'nin geri kalanı konsola gönderilir. Not: yazmanıza gerek Return iki kez sonra HTTP/1.0
.
Etkileşimli shells
öğeyi python
veya ile birlikte kullanabilirsiniz perl
:
In 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
(...)
Bkz. perldoc WWW::Mechanize::Shell
Veya http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
In 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()
(...)
Evet, "--config" seçeneğini kullanabilirsiniz:
Dosyayı stdin'den okumak için curl dosyasını -K, --config olarak '-' olarak belirtin.
Misal:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Komut satırında etkileşimli tarama için lynx'i seviyorum . Yine de ham bir HTML aracından ziyade tam bir tarayıcı (bir ncurses uygulamasına sığar).
Daha önce kullandığım SSL üzerinden ham HTML komutlarını test ettim openssl
, ancak bu her seferinde sadece bir komuta izin veriyor ..
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Openssl'nin s_client seçenekleri hakkında daha fazla bilgi man s_client
için ayrıntıları içerir.
get
Komut dosyası indirecektircat
ekrana çıkış dosyası. Bir http almak içinpost
gibi bir şey kullanabilirsiniz:quote post post.php x=1&y=z
.