Python HTTP ப்ராக்ஸியின் POST உடல்களை rfile இல் இடையகப்படுத்தலாம்
socket இடையகத்தை விட்டு ஏற்கனவே வெளியேறிய பைட்டுகளுக்காகக் காத்திருக்காமல், handler இன் இடையகப்படுத்தப்பட்ட உள்ளீட்டின் வழியாக Python HTTP ப்ராக்ஸி கோரிக்கையைப் படிக்கவும்.
முன்னனுப்பு ப்ராக்ஸி கோரிக்கை வரியையும் தலைப்புகளையும் படித்து, அவற்றை அனுப்பி, பின்னர் select இல் POST உடலுக்காகக் காத்திருக்கிறது. வாடிக்கையாளர் அதை ஏற்கனவே அனுப்பிவிட்டார். இரு பக்கமும் ஒன்றையொன்று எதிர்பார்த்திருப்பது போல் தெரிகிறது.
Python இன் BaseHTTPRequestHandler இல், தலைப்புகளைப் படிப்பது rfile வழியாகச் செல்கிறது, அது இடையகப்படுத்தப்பட்ட உள்ளீட்டு ஸ்ட்ரீம். அந்த ஸ்ட்ரீம் முன்னோக்கிப் படித்து உடலுக்குரிய பைட்டுகளை வைத்திருக்க முடியும். அடிப்படை socket மீது காத்திருப்பது அதன் கோப்பு விவரிப்பான் தயாரா என்பதை மட்டுமே கேட்கிறது; Python ஸ்ட்ரீமில் ஏற்கனவே பயன்படுத்தக்கூடிய தரவு உள்ளதா என்பதைக் கேட்கவில்லை.
தலைப்புகளைப் படித்த இடையகத்தைப் பின்பற்றுங்கள்
உடலையும் self.rfile வழியாகப் படியுங்கள். இடையகப்படுத்தப்பட்ட ஸ்ட்ரீமால் தலைப்புகளைப் பகுப்பாய்வு செய்த பிறகு self.connection.recv க்கு மாற வேண்டாம். இல்லையெனில் அந்த ஸ்ட்ரீம் வைத்திருக்கும் பைட்டுகளைத் தவிர்த்து, மீண்டும் ஒருபோதும் அனுப்பப்படாத தரவுக்காகக் காத்திருக்கலாம்.
rfile ஐயே select க்கு அனுப்புவது select அதன் Python இடையகத்தை ஆய்வு செய்யச் செய்யாது. தயார்நிலை API பொருளின் கோப்பு விவரிப்பான் வழியாக வேலை செய்கிறது.
ஒரு செல்லுபடியாகும் Content-Length உள்ள, Transfer-Encoding இல்லாத கோரிக்கைக்கு, அறிவிக்கப்பட்ட பைட் எண்ணிக்கையைச் சரியாகப் பயன்படுத்துங்கள், உள்ளீட்டின் முன்கூட்டிய முடிவையும் உங்கள் அளவு மற்றும் நேர வரம்புகளையும் கையாளுங்கள். EOF வரை படிக்க வேண்டாம்: நிலையான இணைப்பைப் பயன்படுத்தும் வாடிக்கையாளர் கோரிக்கை முடிந்த பிறகும் இணைப்பைத் திறந்து வைக்கலாம்.
பிரேமிங்கை ப்ராக்ஸியின் வெளிப்படையான பகுதியாக்குங்கள்
துண்டாக்கப்பட்ட கோரிக்கை உடல்களுக்கு துண்டாக்கப்பட்ட பிரேமிங் ஆதரவு தேவை. இல்லாத Content-Length தேடி அவற்றைப் படிக்க முடியாது. தெளிவற்ற நீள மெட்டாடேட்டாவுக்கு வசதியாகத் தோன்றும் தலைப்பைத் தேர்ந்தெடுப்பதற்குப் பதிலாக வரையறுக்கப்பட்ட நிராகரிப்புப் பாதை தேவை.
தடுக்கும் handler வரம்புக்குட்பட்ட படிப்புகளுடன் அதன் ஸ்ட்ரீம் இடைமுகத்தைத் தொடர்ந்து பயன்படுத்தலாம். நிகழ்வு-இயக்கும் ப்ராக்ஸிக்கு பார்சரின் முன்னோக்கிப் படிப்பைத் தயார்நிலைக் கையாளுதலுடன் ஒருங்கிணைக்கும் இடையக மாதிரி தேவை. நேர வரம்பை மாற்றுவது ஒரே socket இன் இரு சுயாதீன நுகர்வோரை இணக்கமாக்காது.
இந்தக் கண்டறிதல் உள்வரும் பைட்டுகள் எங்கே வைக்கப்படுகின்றன என்பதைப் பற்றியது. ப்ராக்ஸி சரியான உடலை நுகர்ந்த பிறகும், அந்த உடலைச் சீரான HTTP பிரேமிங்குடன் அனுப்ப வேண்டும். நிலையான http.server handler செயல்முறையைப் புரிந்துகொள்ளப் பயனுள்ள இடம், ஆனால் அது உற்பத்தி முன்னனுப்பு-ப்ராக்ஸி செயலாக்கம் அல்ல.