python中使用套接字发送HTTP请求

开门见山,直接看代码

#!/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区别链接

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值