Xây dựng một proxy đơn giản


9

Tạo máy chủ proxy ngắn nhất.

Thông số kỹ thuật đầu vào / đầu ra

Khách hàng:

  • Đầu vào: số cổng (số nguyên 32 bit) (,) hoặc (dấu cách) một url (xem trường hợp kiểm tra)
  • Đầu ra: nguồn html của url

Người phục vụ:

  • Đầu vào: cổng để nghe (số nguyên 32 bit)
  • Đầu ra: REC khi nhận được đầu vào từ máy khách, OK khi gửi xong nguồn html cho máy khách.

Quy tắc

  • Bạn có thể tạo một chương trình hoàn chỉnh hoặc các chức năng bằng ngôn ngữ diễn giải .
  • Đầu vào được lấy thông qua stdin hoặc đưa ra làm đối số .
  • Mã của bạn chỉ hoạt động cho các trường hợp thử nghiệm nhất định (nhiều hơn là tùy chọn, ít hơn là không hợp lệ).
  • Đầu ra của máy khách phải giống với những gì bạn nhận được khi "xem nguồn" từ trình duyệt.
  • Máy chủ có thể thoát sau mỗi yêu cầu được xử lý (nghĩa là không phải liên tục / daemon)
  • ( chỉnh sửa ) Bất kỳ đầu vào / đầu ra nào khác ngoài những gì được chỉ định, đều bị cấm.

Các trường hợp thử nghiệm (đầu vào của khách hàng)

  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

Trong đó N i là số nguyên ngẫu nhiên trong khoảng từ 1 đến 2048.


Có phải máy chủ phải được tái sử dụng? Hoặc nó có thể là một proxy một shot?
Nemo157

@Nemo: bạn có nghĩa là tái sử dụng? (nhưng tôi cho rằng câu trả lời là "vâng, nó có thể là một phát súng")
Eelvex

@Nemo: có, sẽ ổn nếu máy chủ thoát sau khi yêu cầu được xử lý tốt.
Eelvex

Câu trả lời:


4

ZSH - 57 + 42 ký tự

Người phục vụ:

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

Khách hàng:

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

Sử dụng:

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"

Đã được một thời gian kể từ lần cuối tôi sử dụng zsh, nhưng bạn không thể thoát khỏi tất cả các trích dẫn (cần thiết cho bash) khi sử dụng shell đó?
Xin vui lòng

@idealmachine: Những cái trên dòng thứ hai của khách hàng tôi nghĩ là cần thiết, tôi chỉ nhận được chân trang từ tìm kiếm StackExchange. Những người khác, tôi không chắc chắn, dường như làm việc mà không có họ mặc dù. Tôi không thực sự làm nhiều kịch bản trong zsh.
Nemo157

Có, curl nên im lặng (quy tắc cập nhật để làm rõ).
Eelvex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.