def fetch(self, method, host, path, headers, payload, bufsize=8192, timeout=20):
request_data = '%s %s HTTP/1.1\r\n' % (method, path)
request_data += ''.join('%s: %s\r\n' % (k, v) for k, v in headers.items())
request_data += '\r\n'
#print("request:%s" % request_data)
#print("payload:%s" % payload)
conn = self.get_conn()
if not conn:
logging.warn("get sock fail")
return
if len(request_data) + len(payload) < 1300:
payload = request_data.encode() + payload
else:
conn.sock.send(request_data.encode())
payload_len = len(payload)
start = 0
while start < payload_len:
send_size = min(payload_len - start, 65535)
sended = conn.sock.send(payload[start:start+send_size])
start += sended
conn.sock.settimeout(timeout)
response = httplib.HTTPResponse(conn.sock, buffering=True)
response.conn = conn
try:
#orig_timeout = conn.sock.gettimeout()
#conn.sock.settimeout(timeout)
response.begin()
#conn.sock.settimeout(orig_timeout)
except httplib.BadStatusLine as e:
logging.warn("fetch bad status line:%r", e)
response = None
except Exception as e:
logging.warn("fetch:%r", e)
return response
simple_http_client.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录