如果,在网站的页面里随机插入坏链接,或在检测到是爬虫时,返回无限大响应的请求,比如发送无限大的永不结束的 http header ,或用 chunked 编码返回无限的大压缩率数据来直接撑暴对方服务器内存。
据我所知,现在的 http 库都没有处理这种情况,比如 python 的 urllib3/requests/pyCURL 等。
下面随手写的一个小程序来模拟一个无限大响应,我的爬虫处理不了这种情况啊!如果有人想这样干我我一点办法都没有的!(这里还没用压缩数据,一用的话内存马上就暴了)
有谁知道有处理这类情况的库?
爬虫代码:
import requests
r=requests.get('http://localhost:8888', timeout=20)
程序:
#!/usr/bin/env python2
import socket
from time import sleep
host = ''
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = conn.recv(4096)
print data
headers = [
'HTTP/1.1 200 OK',
'Server: FuckingServer',
'Content-Type: text/plain',
'Transfer-Encoding: chunked',
]
conn.send('\r\n'.join(headers))
conn.send('\r\n\r\n')
data = '5\r\nFuck!\r\n2\r\n\r\n\r\n'*10000
end = '0\r\n\r\n'
while True:
conn.send(data)
sleep(1)
print '.'
conn.close()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.