Может ли кто-нибудь сказать мне, что происходит с этой простой настройкой сервера? Он основан на том же коде, что и в this question, и, возможно, похожая проблема - но мне нужен запрос POST, а не GET, который был окончательным разрешением в другом вопросе? Проблема в том, что self.args
пуст, когда я ожидал {'verify': 'true'}
.Отправка и разбор HTTP-запроса POST с помощью Python
Вот мой запрос POST:
import requests
url = 'http://localhost:8080/'
data = {'verify': 'true'}
response = requests.post(url, params=data)
print response.text
И обработчик, который работает на локальном хосте:
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.query_string = self.rfile.read(int(self.headers['Content-Length']))
self.args = dict(cgi.parse_qsl(self.query_string))
self.send_response(200)
self.end_headers()
self.wfile.write("Content-type: text/html<BR><BR>");
self.wfile.write("<HTML>POST OK.<BR><BR>");
def main():
server = HTTPServer(('', 8080), MyHandler)
server.serve_forever()
if __name__ == '__main__':
main()
Обработчик вывода в случае, который помогает Jamie-PC - - [15/Jul/2013 12:40:34] "POST /?verify=true HTTP/1.1" 200 -
.
POST-запросы (обычно) не используют строку запроса для передачи параметров. Вместо этого они передаются внутри тела запроса. –
Возможный дубликат [Python: BaseHTTPRequestHandler post variables] (http://stackoverflow.com/questions/4233218/python-basehttprequesthandler-post-variables) –
Спасибо. Не видел этого дубликата - я постараюсь, чтобы это работало. –