Bangun proxy sederhana

9

Buat server proxy terpendek.

Spesifikasi Input / Output

Klien:

  • Input: nomor port (bilangan bulat 32-bit) (,) atau (spasi) url (lihat kasus uji)
  • Output: sumber html dari url

Server:

  • Input: port untuk didengarkan (integer 32-bit)
  • Output: REC ketika input diterima dari klien, OK ketika selesai mengirim sumber html ke klien.

Aturan

  • Anda dapat membuat program atau fungsi yang lengkap dalam bahasa yang ditafsirkan .
  • Masukan diambil melalui stdin atau diberikan sebagai argumen .
  • Kode Anda hanya berfungsi untuk kasus uji yang diberikan (lebih banyak opsional, lebih sedikit tidak valid).
  • Output klien harus sama dengan apa yang Anda dapatkan ketika Anda "melihat sumber" dari browser.
  • Server dapat keluar setelah setiap permintaan yang ditangani (yaitu tidak harus persisten / daemon)
  • ( edit ) Input / output apa pun selain dari yang ditentukan, dilarang.

Kasus uji (input klien)

  1. N 1 https://stackoverflow.com/
  2. N 2 http://en.wikipedia.org/wiki/Proxy_server
  3. N 3 http://stackexchange.com/search?q=code+golf

di mana N i adalah bilangan bulat acak antara 1 dan 2048.

Eelvex
sumber
Apakah server harus digunakan kembali? Atau mungkinkah itu proksi sekali pakai?
Nemo157
@Nemo: apa maksudmu dapat digunakan kembali? (tapi saya kira jawabannya adalah "ya, itu bisa menjadi satu pukulan")
Eelvex
@Nemo: ya, tidak apa-apa jika server keluar setelah permintaan ditangani dengan baik.
Eelvex

Jawaban:

4

ZSH - 57 + 42 karakter

Server:

s=$(nc -l $1)
echo REC
curl -s $s|nc 127.0.0.1 $1
echo OK

Klien:

echo $2|nc 127.0.0.1 $1
echo "$(nc -l $1)"

Pemakaian:

sudo zsh server.zsh 123

sudo zsh client.zsh 123 http://stackoverflow.com/
sudo zsh client.zsh 123 http://en.wikipedia.org/wiki/Proxy_server
sudo zsh client.zsh 123 "http://stackexchange.com/search?q=code+golf"
Nemo157
sumber
Sudah lama sejak saya terakhir menggunakan zsh, tetapi tidak bisakah Anda menghilangkan semua tanda kutip (diperlukan untuk bash) saat menggunakan shell itu?
PleaseStand
@idealmachine: Yang ada di baris kedua dari klien saya pikir perlu, saya hanya mendapatkan footer kembali dari pencarian StackExchange. Yang lain, saya tidak yakin tentang, tampaknya bekerja tanpa mereka. Saya tidak benar-benar melakukan banyak scripting di zsh.
Nemo157
Ya, ikal harus dibungkam (aturan diperbarui untuk memperjelas).
Eelvex