Ben Python (v3.3 kullanarak) ve web programlaması için bir acemi yaşıyorum ve bütün gece bir sorun ile mücadele ediyorum. Benim sunucuya bir POST çağrısı veren ve aşağıdaki gibi bunu bazı verileri yolluyorum şu şekildedir:SunHTTPRequestHandler kullanarak sunucuma gönderilen verilere nasıl erişirim?
DATA = {"listName":"Test list","listDesc":"A test list with test stuff in it.","refreshMode":"Replace","DBKey":"1","UserDisplaySeq":"1"}
DATA = json.dumps(DATA)
METHOD = "POST"
DATA = DATA.encode("utf-8")
params = "account_id=acct 2"
try:
URL = "http://localhost:8080/lists?" + quote_plus(params)
request = urllib.request.Request(url=URL,data=DATA,method=METHOD)
response = urllib.request.urlopen(request)
...
Ben de kodlanmış bir istek işleyicisi var (Hata ayıklama amacıyla burada baskı tabloların yeri vardır):
class MyHandler(BaseHTTPRequestHandler):
...
def do_POST(self):
length = int(self.headers['Content-Length'])
print("HEADERS: ", self.headers)
print (str(length))
print(self.rfile)
post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))
print(post_data)
Bu konsola aşağıdaki sonucu yazdırır:
Starting thread
started httpserver...
HEADERS: Accept-Encoding: identity
User-Agent: Python-urllib/3.3
Content-Length: 138
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Connection: close
138
<_io.BufferedReader name=404>
{}
Sorularım:
1) sunucuya (do_POST), nasıl I do isteğimle gönderdiğimi düşündüğüm verilere erişiyorum (ör. { "ListName": "Test listesi", "listDesc":? "Bir test ...)
2) bile ilk etapta veri göndermeyi ricam var
3) bir yer var mı? nerede bu acemi erişilebilir açısından belgelenmiştir?
Flask veya Bottle gibi bir web çerçevesi kullanmanın bu işi daha kolay hale getirdiğini görebilirsiniz. – Blender
@Blender - Öneri için teşekkürler. Bottle'ı kullanmayı denedim, ancak gerçekten de HTML'yi kullanmaya yönelik görünüyordu. Çalışmayı birden çok sunucuda dengelemek için RESTful bir uygulama yazıyoruz ve gerçekten bir tarayıcı bileşenine sahip değiliz. Bu şeylerin hemen hemen hepsinde olduğu gibi, şişe dokümantasyonunda bir arka plana sahip olmayan yeni başlayanlar için gerçekten zor olan bir şey olsa da, Şişe dokümantasyonunu harika buldum. – Ben