非阻塞IO发送http请求

网友投稿 258 2022-09-04


非阻塞IO发送http请求

import socketfrom urllib.parse import urlparsefrom selectors import DefaultSelector, EVENT_READ, EVENT_WRITEdef get_url(url): #通过socket请求html url = urlparse(url) host = url.netloc path = url.path if path == "": path = "/" #建立socket连接 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.setblocking(False) try: #如果不try的话 则会有异常,因为链接还没建立好 #BlockingIOError: [WinError 10035] 无法立即完成一个非阻止性套接字操作。 client.connect((host, 80)) #阻塞不会消耗cpu except BlockingIOError as e: pass #不停的询问连接是否建立好, 需要while循环不停的去检查状态 #做计算任务或者再次发起其他的连接请求 while True: try: #发送 #请求行\r\n请求头\r\n\r\n请求体 client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8")) break except OSError as e: pass data = b"" while True: try: d = client.recv(1024) except BlockingIOError as e: continue if d: data += d else: break data = data.decode("utf8") html_data = data.split("\r\n\r\n")[1] print(html_data) client.close()get_url('Files\python3.5\python.exe" E:/pythoncode/day07/01.pyHTTP/1.1 200 OKAccept-Ranges: bytesCache-Control: no-cacheContent-Length: 14615Content-Type: text/htmlDate: Thu, 16 Aug 2018 08:52:32 GMTEtag: "5b56b4a8-3917"Last-Modified: Tue, 24 Jul 2018 05:10:00 GMTP3p: CP=" OTI DSP COR IVA OUR IND COM "Pragma: no-cacheServer: BWS/1.1Set-Cookie: BAIDUID=DCD58464E426E409DBF02803181718DB:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BIDUPSID=DCD58464E426E409DBF02803181718DB; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: PSTM=1534409552; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comVary: Accept-EncodingX-Ua-Compatible: IE=Edge,chrome=1Connection: close


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:聊聊mybatis sql的括号问题
下一篇:序列构成的数组(数组以列序为主序存储)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~