Curl'u etkileşimli kullanmanın bir yolu var mı? Yoksa etkileşimli bir kıvrılma / wget kabuğu var mı?


9

Bunun gibi bir şey düşünün:

$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here.... 

bunu yapmama izin veren bir araç var mı?

Yanıtlar:


8

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-perlolarak adlandırılır LWP-isteğine üç sembolik yükler /usr/bin/GET, /usr/bin/HEADve /usr/bin/POST. Bunlar beklediğiniz şeyi yapar. OpenSuse perl-libwww-perlpaketinin son sürümleri sembolik bağlantıları atlar (muhtemelen bir hatadır), bu yüzden bunları kendiniz oluşturmanız veya lwp-requestdoğ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 curltü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.


8

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 -uve --write-outargü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ı.


6

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 gettek tek dosyaları almak için komutu kullanabilirsiniz .


getKomut dosyası indirecektir catekrana çıkış dosyası. Bir http almak için postgibi bir şey kullanabilirsiniz: quote post post.php x=1&y=z.
donothingsuccessfully

5

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.


4
Dostum, sen sertsin. Netcat HTTP yapacak mı? ah! Birkaç çan ve ıslık ile bir şeyler umuyordum.
Cheeso

1
Neyin peşinde olduğun hakkında hiçbir fikrim yok. En azından soruda belirttiğiniz şeyi yapar, ki bu çok ayrıntılı değildi. Netcat, web taraması için çok uygun bir araç değil. İhtiyaçlarınıza bağlıdır.
Marco

Suçlama yok, sadece söylüyorum, araç biraz daha akıllı olsaydı iyi olurdu. Göndereceği HTTP Üstbilgilerini ayarlamanın bir yolu varsa. Ya da her istek için "HTTP / 1.1" yazmam gerekmiyorsa. veya vb
Cheeso

1

Etkileşimli shellsöğeyi pythonveya 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::ShellVeya 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()
(...)

Bkz. Http://wwwsearch.sourceforge.net/mechanize/


1

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>

0

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_clientiçin ayrıntıları içerir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.