Dengan perintah itu telnet docs.python.org 80
, saya bisa melakukan permintaan HTTP manual http://docs.python.org/2/license.html
, dengan mengetikkan permintaan aktual.
Sekarang, alih-alih mengetiknya secara langsung, saya ingin memberi makan permintaan dari file teks.
Saya mencoba ini:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(Anda harus menyelesaikan file dengan baris kosong atau Anda akan mendapatkan permintaan yang buruk!)
Tetapi koneksi ke server segera ditutup.
Bagaimana saya harus mem- pipe request.txt dengan benar telnet docs.python.org 80
?
edit:
Itu baik untuk diketahui; jika Anda menggunakan HEAD
alih-alih GET
, Anda akan mendapatkan respons yang sama seperti jika Anda melakukan GET
permintaan, kecuali untuk badan pesan.
Jadi, gunakan HEAD
jika Anda hanya ingin memeriksa tajuk HTTP. (Yaitu Agar isi dari tanggapan tidak mengacaukan keluaran shell Anda.)
GET
posting Anda, saya mendapatkan408 Request Time-out
kesalahan. Juga,wget http://docs.python.org/2/license.html
bukankah sebuah opsi?telnet docs.python.org 80
, jadi Anda harus bergegas dan mengetikkan dua baris tersebut (salin tempel jika perlu.) Dalam beberapa detik atau server akan mengembalikan kesalahan batas waktu.telnet docs.python.org 80
<ENTER>
GET /2/license.html HTTP/1.1
<ENTER>
Host: docs.python.org
<ENTER>
<ENTER>
<ENTER>
yang kedua kali pada akhirnya adalah karena protokol HTTP memerlukan baris kosong tambahan setelah header permintaan. Lihat bagian pesan permintaan dari artikel wiki HTTPtelnet < request.txt
tetapi saya tidak bisa mendapatkanGET
perintah untuk bekerja.Jawaban:
Gunakan netcat (perintah nc) daripada "telnet", jadi
Telnet adalah peretasan cepat dan mudah, tetapi netcat, tampaknya, adalah alat yang tepat untuk pekerjaan itu.
sumber
Saya tidak benar-benar memiliki pengalaman dengan
telnet
tetapi butuh input dari pengalihan file:Saya dapat menghubungkannya ke server dengan benar sebagai berikut:
Mungkin Anda bisa mencari cara untuk menerima
GET
perintah tapi saya tidak bisa. Alternatifnya adalah dengan menggunakanexpect
skrip:Anda kemudian dapat menyimpan skrip sebagai
telnet.exp
, membuatnya dapat dieksekusi dan menjalankannya:sumber
expect
! Saya memilih jawaban davidgo karena itu hanya solusi terbaik untuk kasus ini. Saya tidak melihat perbedaan penggunaan antara netcap dan telnet untuk apa yang ingin saya capai. Terima kasih atas upaya Terdon, jika saya dapat meningkatkan jawaban Anda, saya akan melakukannya.nc
adalah solusi yang lebih baik, Anda harus menerimanya.interact
yang tepat untuk mengakhiriexpect
skrip itu.interact
"memberikan kontrol terhadap proses saat ini kepada pengguna, sehingga penekanan tombol dikirim ke proses saat ini, dan stdout dan stderr dari proses saat ini dikembalikan" (itu dariman expect
). Jadi,interact
adalah cara untuk memberikan pengguna cara untuk benar-benar menggunakan koneksi telnet.telnet
daripada berinteraksi dengan itu saya pikir Anda harus berakhir denganclose -i $spawn_id
atau sesuatu seperti itu. Maka skrip akan keluar. Denganinteract
saya sebenarnya tidak dapat keluartelnet
sama sekali, dan harus menutup terminal saya. Cukup menyedihkan (meskipun mungkin sebagian salah saya.)