【发布时间】:2020-09-20 02:37:48
【问题描述】:
我正在使用 tcp 套接字从网站读取数据,确切地说是 HTTP 请求。我想使用套接字而不是请求或 pycurl,所以请不要向我推荐任何更高级别的库。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = wrap_socket(s)
response_bytes = b""
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
s.connect((website))
s.send(all of this works good)
#this is where my problems occur
while True:
response_bytes+=s.recv(4096)
if not response_bytes: break
此解决方案应该可以根据多个堆栈帖子完美运行。我想使用最有效的方式而不会超时。如果我使用 try/except 并设置套接字超时,它可以正常工作,但这不是很好的 imo。这似乎使代码永远挂起并使其尝试无限读取。它这样做有什么理由吗?
【问题讨论】:
-
如果您想实现自己的 HTTP 处理,这远远不够。您需要阅读 RFC 2616 和后续版本,尤其是部分内容长度。我不推荐它。使用图书馆。
标签: python python-3.x sockets networking python-sockets