Python, httplib2, непредвиденная ошибка: socket.error
Использование python 2.4.3 Я пытаюсь создать HTTP-сервер, который: (1) получает сообщение с "POST", (2) создает ответное сообщение, (3) отправляет ответное сообщение обратно отправителю.
Шаг (1) и (2) идут хорошо, Шаг 3 не проходит.... иногда. Похоже, что есть некоторые проблемы с использованием httplib2.Http(). Выход, когда это терпит неудачу, является:
Unexpected error: socket.error 10.96.5.127 - - [26/May/2014 07:55:39] code 500, message Error processing in do_POST 10.96.5.127 - - [26/May/2014 07:55:39] "POST /exchange/PERFOR HTTP/1.1" 500 -
Вот мой код (импорт не показан):
class PostHandler(BaseHTTPRequestHandler):
def do_POST(self):
try:
# (1) Message from sender is received by server : OK
content_len = int(self.headers.getheader('content-length'))
msg = self.rfile.read(content_len)
self.send_response(200)
self.end_headers()
# (2) Received message is used to make the 'smsg' message to be send back.
# This goes OK so I don't need to show the code.
# (3) Now 'smsg' shoud be send back to sender
headers = {"Content-type" : "text/xml" , "Accept": "text/xml" , "User-Agent" : "haboob/5.9.0.0.4 build-4857" , "SOAPAction": "\"ebXML\"" }
url = 'http://mynode.local:4080/destination'
http = httplib2.Http()
response, content = http.request(url, method="POST", headers=headers, body=smsg)
except :
print "Unexpected error:", sys.exc_info()[0]
self.send_error(500,'Error processing in do_POST')
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == '__main__':
try:
port=4080
server = ThreadedHTTPServer(('',port), PostHandler)
server.request_queue_size=60
server.serve_forever()
except KeyboardInterrupt:
print ('^C received, shutting down server')
server.socket.close()
Любая помощь будет очень кстати!
1 ответ
Я думаю, что нашел способ решить это. Я добавил после (1) следующую строку:
time.sleep(0.25)
Таким образом, сокеты, открытые для получения сообщения, получают время для закрытия.