Python HTTP проксийн POST биеийг rfile-д буферлэх боломжтой
Python HTTP прокси хүсэлтийг сокет буферээс аль хэдийн гарсан байтуудыг хүлээхийн оронд handler-ийн буферлэсэн оролтоор уншина уу.
Дамжуулах прокси хүсэлтийн мөр болон толгойг уншиж, дамжуулаад, дараа нь select дотор POST биеийг хүлээнэ. Клиент үүнийг аль хэдийн илгээсэн. Хоёр тал бие биеэ хүлээж байгаа мэт харагдана.
Python-ы BaseHTTPRequestHandler-т толгой унших нь rfile-ээр дамждаг бөгөөд энэ нь буферлэсэн оролтын урсгал юм. Тэр урсгал урагш уншиж, биед хамаарах байтуудыг барьж чадна. Суурь сокетыг хүлээх нь зөвхөн файлын дескриптор нь бэлэн эсэхийг асуудаг; Python урсгалд ашиглах боломжтой өгөгдөл аль хэдийн байгаа эсэхийг асуудаггүй.
Толгойг уншсан буферийг дага
Биеийг мөн self.rfile-ээр уншина уу. Толгойг буферлэсэн урсгалаар задлан шинжилсний дараа self.connection.recv руу шилжихгүй байх хэрэгтэй. Эс бөгөөс код тэр урсгалын барьж буй байтуудыг алгасаж, дахин хэзээ ч илгээгдэхгүй өгөгдлийг хүлээж болно.
rfile-ийг өөрөө select-д өгөх нь select-ийг түүний Python буферийг шалгахад хүргэдэггүй. Бэлэн байдлын API нь объектын файлын дескриптороор ажилладаг.
Нэг хүчинтэй Content-Length бүхий, Transfer-Encodingгүй хүсэлтийн хувьд зарласан байтын тоог яг хэрэглэж, оролтын хугацаанаас өмнөх төгсгөл болон өөрийн хэмжээ, цагийн хязгаарыг зохицуулна уу. EOF хүртэл бүү унш: байнгын холболт ашиглаж буй клиент хүсэлт дууссаны дараа холболтыг нээлттэй үлдээж болно.
Хүрээлэлтийг проксийн тодорхой хэсэг болго
Хэсэгчилсэн хүсэлтийн биед хэсэгчилсэн хүрээлэлтийн дэмжлэг хэрэгтэй. Тэдгээрийг байхгүй Content-Length хайж унших боломжгүй. Хоёрдмол утгатай уртын мета өгөгдөлд тохиромжтой толгойг сонгохын оронд тодорхой татгалзах зам хэрэгтэй.
Блоклох handler хязгаарлагдмал уншилттайгаар урсгалын интерфейсээ үргэлжлүүлэн ашиглаж болно. Үйл явдалд удирдуулсан проксид задлагчийн урагш уншилтыг бэлэн байдлын зохицуулалттай нэгтгэсэн буферийн загвар хэрэгтэй. Таймаут солих нь нэг сокетын хоёр бие даасан хэрэглэгчийг эвлэрүүлэхгүй.
Энэ оношлогоо нь орж ирж буй байтууд хаана хадгалагдаж байгаад хамаатай. Прокси зөв биеийг хэрэглэсний дараа ч тэр биеийг нийцтэй HTTP хүрээлэлттэйгээр дамжуулах шаардлагатай. Стандарт http.server handler нь механизмыг ойлгоход тохиромжтой газар боловч үйлдвэрлэлийн дамжуулах проксийн хэрэгжилт биш юм.