当前位置: 代码迷 >> 综合 >> [python]asyncio 模拟 http 请求,并获取响应
  详细解决方案

[python]asyncio 模拟 http 请求,并获取响应

热度:75   发布时间:2023-12-05 12:53:35.0
#asyncio 没有提供http协议的接口 ,可以用aiohttp
import asyncio
import socket
from urllib.parse import urlparseasync def get_url(url):#通过socket请求htmlurl = urlparse(url)host = url.netlocpath = url.pathif path == "":path = "/"#建立socket连接reader, writer = await asyncio.open_connection(host,80)writer.write("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8"))all_lines = []async for raw_line in reader:data = raw_line.decode("utf8")all_lines.append(data)html = "\n".join(all_lines)return htmlasync def main():tasks = []for url in range(20):url = "http://shop.projectsedu.com/goods/{}/".format(url)tasks.append(asyncio.ensure_future(get_url(url)))for task in asyncio.as_completed(tasks):    #这里注意,完成一个就会打印一个,我也没看懂result = await taskprint(result)if __name__ == "__main__":import timestart_time = time.time()loop = asyncio.get_event_loop()loop.run_until_complete(main())	 #这里也没有看懂,直接传个协程进来也可以。。。print('last time:{}'.format(time.time()-start_time))
  相关解决方案