2011-03-08 19 views
5

Bir Python komut dosyasında bir HTTP sunucusu kurmaya çalışıyorum. Şimdiye kadar, sunucuya kendiliğinden çalıştım, here'dan aşağıya benzer bir kodla.Python'da HTTP GET değişkenleri alınıyor

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 

class MyHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     print("Just received a GET request") 
     self.send_response(200) 
     self.send_header("Content-type", "text/html") 
     self.end_headers() 

     self.wfile.write('Hello world') 

     return 

    def log_request(self, code=None, size=None): 
     print('Request') 

    def log_message(self, format, *args): 
     print('Message') 

if __name__ == "__main__": 
    try: 
     server = HTTPServer(('localhost', 80), MyHandler) 
     print('Started http server') 
     server.serve_forever() 
    except KeyboardInterrupt: 
     print('^C received, shutting down server') 
     server.socket.close() 

Ancak, GET isteği değişkenleri almak gerekir, bu yüzden server.py?var1=hi talep edilirse, I (gibi yazdırmak) bir Python değişken ve sürecin bunu içine var1 koymak Python kodu gerekir. Bunun için nasıl giderim? Python profesyonelleri size basit bir soru olabilir ama bu Python acemi ne yapacağını bilmiyor! Şimdiden teşekkürler!

cevap

4

urlparse.parse_qs()

print urlparse.parse_qs(os.environ['QUERY_STRING']) 

Yoksa sipariş veya çoğaltır, urlparse.parse_qsl() veriyorsan. Python 3'te

İthalat:from urllib.parse import urlparse

+0

O rastlamak, ama ben bu nasıl entegre emin değilim ... Bana verir misiniz kısa bir örnek? – BloodPhilia

+0

'urlparse.parse_qs()' bir sözlük döndürür. Python'daki diğer sözlüklerde olduğu gibi kullanın. –

+2

Sadece bu cevabı kontrol ettik ve BaseHTTPServer'ın ortam değişkenlerini nereye koyacağını bulamıyorum. CGIHTTPServer yok. – samplebias

6

İthalat urlparse ve yapın:

def do_GET(self): 
    qs = {} 
    path = self.path 
    if '?' in path: 
     path, tmp = path.split('?', 1) 
     qs = urlparse.parse_qs(tmp) 
    print path, qs 
+0

Teşekkürler, bu hile tamam oldu! – BloodPhilia

+4

Ayrıca, elle * yolunu * ayırmak yerine "parse_qs" ifadesini "urlparse (self.path) .query" olarak da uygulayabilirsiniz. – mlt

İlgili konular