2010-12-10 16 views
22

मैं हर जगह देखा है और अजगर प्रॉक्सी सर्वर के लाखों लोगों पाया, लेकिन कोई भी ठीक मैं क्या चाहते हैं करते हैं (मुझे लगता है कि: रों)गंभीरता से सरल पायथन HTTP प्रॉक्सी?

मैं आम तौर पर काफी अजगर के साथ अनुभव का एक सा पड़ा है, लेकिन मैं काफी के लिए नया हूँ HTTP प्रोटोकॉल के गहरे अंधेरे रहस्यों की दुनिया।

मुझे लगता है कि जो उपयोगी हो सकता है वह एक बहुत ही सरल प्रॉक्सी उदाहरण होगा जिसे कनेक्ट किया जा सकता है और फिर स्वयं इसे पारित पते से कनेक्ट करने का प्रयास करेगा।

इसके अलावा, मुझे लगता है कि मुझे क्या भ्रमित कर रहा है वह सबकुछ छुपा हुआ सामान है, उदाहरण के लिए यदि कक्षा बेसएचटीटीपीएसरवर से प्राप्त होती है। बेसहेटीटीपीक्वैस्टहैंडलर जब पृष्ठ का अनुरोध किया जाता है तो क्या होता है, जैसा कि मैंने पाया है कि कई उदाहरणों में पथ चर के लिए कोई संदर्भ नहीं है, तो अचानक पोफ! self.path एक समारोह में प्रयोग किया जाता है। मुझे लगता है कि यह विरासत में मिला है, लेकिन यह पथ के साथ कैसे समाप्त होता है?

im खेद है कि अगर खास मतलब नहीं था, के रूप में मेरी समस्या के लिए मेरा विचार शायद तले है :(

अगर आप कुछ भी जो होगा मेरे सवाल का स्पष्ट कृपया, कृपया सुझाव है कि मैं इसे जोड़ने के बारे में सोच सकते हैं। xxx

संपादित करें:

इसके अलावा, विस्तृत प्रक्रियाओं के माध्यम से जो प्रॉक्सी अनुरोध हैंडल की एक explaination के लिए एक लिंक, पृष्ठ का अनुरोध करता (/ कैसे पढ़ इस बिंदु पर डेटा को संशोधित करने) और को पास कर मूल अनुरोधकर्ता की बहुत सराहना की जाएगी xxxx

+0

यदि अनुरोध या प्रतिक्रिया जो आप करना चाहते हैं, में कोई संशोधन है, तो आपको यह बताएं कि वह प्रसंस्करण क्या है। जैसे यूआरएल आपको पास कर दिया गया है, आप यूआरएल को कैसे निर्धारित करते हैं जिसे आप कनेक्ट करना चाहते हैं? ("वही" मत कहो, क्योंकि यह आपके पास वापस आ जाएगा)।विस्तृत करने के लिए –

+0

umm, मेरा मतलब यूआरएल फ़िल्टरिंग, भारित शब्द गणना जैसे कुछ के लिए डेटा तक पहुंच, या शायद मनमाने ढंग से संपादित करने के लिए (अभी भी सामान्य है, लेकिन केवल एक स्ट्रिंग के रूप में इसे एक्सेस करने की ज़रूरत है) – jma

उत्तर

26

"एक बहुत ही सरल प्रॉक्सी उदाहरण जिसे कनेक्ट किया जा सकता है और फिर इसे पास किए गए पते से कनेक्ट करने का प्रयास करेगा।" यह वास्तव में एक HTTP प्रॉक्सी की परिभाषा है।

वहाँ एक वास्तव में सरल प्रॉक्सी यहाँ उदाहरण है:

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     self.copyfile(urllib.urlopen(self.path), self.wfile) 

तो यह एक SimpleHTTPRequestHandler GET अनुरोध के जवाब में, खुलने वाले है: http://effbot.org/librarybook/simplehttpserver.htm

यह की कोर सिर्फ 3 लाइनों है पथ में यूआरएल (प्रॉक्सी का अनुरोध आम तौर पर "GET /index.html" की तरह नहीं, "http://example.com/ प्राप्त करें" जैसा दिखता है)। इसके बाद वह उस यूआरएल से प्रतिक्रिया के लिए जो कुछ भी पढ़ सकता है उसकी प्रतिलिपि बनाता है।

नोटेट कि यह वास्तव में न्यूनतम है। यह हेडर से निपटता नहीं है, मुझे विश्वास है।

बीटीडब्ल्यू: pathhttp://docs.python.org/library/basehttpserver.html पर प्रलेखित है। यह आपके do* विधि से पहले सेट किया गया था।

+0

यह आश्चर्यजनक रूप से त्वरित धन्यवाद था आप!!!! हां, लम्बे समय के बारे में खेद है ..... xx – jma

+0

जो पृष्ठ कहता है उससे परे, मैं सोच रहा था कि आपके पास डेटा को संपादित करने के तरीके के बारे में कोई संकेत है? मैं rfile/wfile सोच रहा था, लेकिन मुझे नहीं पता कि यह एक स्क्रिप्ट में कहां रखा जाना चाहिए, अगर यह सही बात है xxx – jma

+2

न्यूनतम हेडर हैंडलिंग के लिए (आपको 200 से भी ठीक नहीं है), 'स्वयं जोड़ें' .send_response (200) 'और' self.end_headers() '' __GET() 'की पहली दो पंक्तियों के रूप में। (उनके बिना, 'ab' अनुरोध विफल होने पर विचार करता है।) – mjs

11

twisted विकी

from twisted.web import proxy, http 
from twisted.internet import reactor 
from twisted.python import log 
import sys 
log.startLogging(sys.stdout) 

class ProxyFactory(http.HTTPFactory): 
    protocol = proxy.Proxy 

reactor.listenTCP(8080, ProxyFactory()) 
reactor.run() 
4

proxpy से नहीं बल्कि होनहार लग रहा है, यह अनुरोध और प्रतिक्रियाओं tweak करने के लिए बहुत आसान है।

+2

+1। यदि आप एक प्रॉक्सी चाहते हैं जो सही अनुरोध (हेडर और सभी सहित) के आगे है, लेकिन अनुरोध को ट्विक करने में सक्षम होना चाहते हैं, तो आप ProxPy की तरह कुछ चाहते हैं। –

संबंधित मुद्दे