开门见山,直接看代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/4/27 0027 12:47
# @Author : Willpower-chen
# @Site :
# @File : socket.py
# @Software: PyCharm
import socket
from urllib.parse import urlparse
def url_parse(url):
url = urlparse(url)
host = url.netloc #这里用netloc会提取出url中的host
path = url.path
if path == "": #path的规范格式,如果url中没有path需要以/代替
path='/'
client = socket.socket()
client.connect((host,80)) #绑定host和端口,http服务默认80
client.send('GET {} HTTP/1.0\r\nHost:{}\r\n\r\n'.format(path,host).encode())
#发送的http请求头数据格式,GET {} HTTP/1.0 规范要求,不能发错
data =b""
chunk = client.recv(1024)
while chunk: # 循环接收数据,因为一次接收不完整
data += chunk
chunk = client.recv(1024)
data = data.decode('utf8')
print(data)
client.close()
if __name__=="__main__":
url_parse('http://www.baidu.com')
代码整体没太大问题,但是因为我跟着教程来,开始的时候HTTP我使用的1.1版本的,导致我的数据返回后不能及时的断开连接,最后查阅资料,才发现1.1的HTTP请求是长链接才会使用的,如果短连接的话就使用1.0就可以了,希望在此记住这个知识点.
引用: https://www.cnblogs.com/gofighting/p/5421890.html HTTP1.0和1.1区别链接