首页 > 其他分享 >api/Request

api/Request

时间:2023-05-25 17:46:26浏览次数:36  
标签:url self Request headers api result import message

1、介绍

 对应http请求对象。两种设置方法:

  • 基于url设置
  • 基于请求报文message设置,伴随设置协议类型https_flag

2、代码

import re
import time

import requests

from api.PropertiesClasses import Headers
from api.ResponseClass import Response
from api.UrlClass import Url

"""
http请求对象
"""


class Request:
    def __init__(self, url: str = '', https_flag: bool = False, message: str = ''):
        # 请求方法,默认是get
        self.method = 'GET'
        # 协议版本
        self.protocol_version = 'HTTP/1.1'
        # 请求头部,至少有host这个头部字段。
        self.headers = Headers()
        # 请求体部
        self.body = ''
        # url,主要是包含协议部分。
        self.url = ''
        # 编号,默认为-1,从1开始递增
        self.id = -1
        # 请求的发送时间,格式是20230423 10:00:00
        self.send_time = ''
        # 响应时延,float类型,单位是秒
        self.wait_time = -1
        # 响应对象
        self.res = None

        if url != "":
            self.url = url
            u = Url(url)
            self.headers.update_or_add("Host", u.hostname + u.port)
        elif message != "":
            pattern = "^([\\S]*) ([\\S]*) ([\\S]*)((\n[^\n]+)*)\n\n(.*)"
            result = re.findall(pattern=pattern, string=message, flags=re.DOTALL)
            if result:
                self.method = result[0][0]
                self.protocol_version = result[0][2]
                self.body = result[0][5]
                if result[0][3] != "":
                    self.headers = Headers(result[0][3])
                self.url = "https://" if https_flag else "http://"
                self.url = self.url + str(self.headers.getFirstValue("Host")) + str(result[0][1])

    def send(self, timeout: float = None, d: dict = None):
        if type(timeout)==int and timeout <= 0:
            timeout = None
        # 记录发送请求的时间
        t1 = time.time()
        self.send_time = time.strftime("%Y%m%d-%H:%M:%S")
        # 对请求头部处理
        headers_dict = dict(self.headers.property_list)
        if type(d) == dict:
            headers_dict.update(d)
        try:
            resp = requests.request(method=self.method, url=self.url, headers=headers_dict, allow_redirects=False,
                                    data=self.body, timeout=timeout)
            # 实际使用的header进行再赋值
            self.headers = Headers(resp.request.headers)
            self.res = Response(resp)
            # 计算等待的时间,整数和小数部分一共保留六位
            self.wait_time = str(time.time() - t1)[:6]
        except Exception as e:
            print(e)

    """
    获取报文
    """

    def get_message(self):
        """get_message()->str"""
        u = Url(self.url)
        message = '%s %s %s\n%s\n\n%s' % (self.method, u.path + u.query, self.protocol_version,
                                          self.headers.toString(), self.body)
        return message

    """
    克隆,不包括响应信息,以及id信息
    """

    def clone(self):
        """clone() -> Request"""
        c = Request()
        c.method = self.method
        c.protocol_version = self.protocol_version
        c.url = self.url
        c.headers = self.headers.clone()
        c.body = self.body
        return c

标签:url,self,Request,headers,api,result,import,message
From: https://www.cnblogs.com/wd404/p/17432339.html

相关文章

  • 淘宝天猫京东1688拼多多商品详情API接口(商品价格监控,商品上传等场景)代码对接
    抓取淘宝商品详情价格接口代码封装如下:请求方式:HTTPS POSTGET公共参数名称类型必须描述key String 是 调用key(必须以GET方式拼接在URL中)API接口 API接口secret String 是 调用密钥api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search_......
  • express开发api指南--服务器发布
    8.1Linux服务器linux服务器相对简单。一般都自带node环境。没有的话apt-get或者yum安装一下。//查看node版本node-v//把文件除了node-modules文件夹都上传到服务器//以放在opt/express为例cd/opt/expressnpminstall//使用pm2包npminstall-gpm2//在项目文件夹下执......
  • express开发api指南--记录日志
    败笔,目前还是我的败笔。没有找到好的方法去记录。现在只能记录请求的记录,api的返回记录没有记录下来。用的morgan中间件。这个在项目创建时已安装。//首先安装轮询文件流插件和时间处理插件cnpminstall--saverotating-file-streamdayjs//修改app.js//引入插件varrfs=......
  • GitHub API
    GithubAPIGitHubAPI是一个RESTfulAPI,支持HTTP请求和JSON响应。主要用于访问GitHub上的仓库、问题、pullrequest、用户、组织等信息。使用GitHubAPI,你需要遵循以下步骤:1.获取个人访问令牌首先,你需要在GitHub上创建一个个人访问令牌,用于进行API访问。在Git......
  • 基于Qt的音乐播放器(三)通过酷狗音乐的api接口,返回json格式歌曲信息(播放地址,歌词,图片)
    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票!我的投票地址:点击为我投票文章目录前言1.获取歌曲搜索列表api接口2.获取单个歌曲详细信息包括歌词3.总结前言首先说明,本教程仅供个人学习,研究使用,禁止用于任何的商业和非法用途。(手动狗头)之所以要研究这个,是因为我想......
  • 电商erp系统选品,跨境ERP系统选品,api接口采集数据
    ​  电商ERP系统选品优势:1.自动化选品:电商ERP系统可以根据销售数据、客户反馈、市场趋势等因素,自动化地筛选出热销商品,快速进行选品;2.数据分析功能:电商ERP系统可以对历史销售数据进行分析,得出销售趋势、客户偏好等信息,有利于精细化选品;3.库存管理:电商ERP系统可以管理商......
  • apisix 容器安装
    1.按照官方文档进行docker容器安装,安装完成后启动报错,关键错误日志如下:apisix|2023/05/2506:36:35[error]7#7:*205[lua]resolver.lua:80:parse_domain():failedtoparsedomain:etcd-server,error:failedtoquerytheDNSserver:dnsservererror:3nameerro......
  • Chat--GPT-官方最新API官方免费PC版-Chat官方API
    为您推荐chatgpt,它是一种全球最新的、可通过浏览器使用的基于GPT技术的聊天机器人平台。我们的卖点在于:国内可用:与其他海外提供的聊天机器人平台不同,chatgpt可在中国境内访问,且稳定性高。免费使用:我们提供免费使用的服务,无需购买任何版本或额外的插件,商业用户也能够免费......
  • 淘宝API接口的各种应用
    淘宝API接口是一种强大且多功能的工具,可帮助开发者利用淘宝平台的海量数据并以此更高效地完成各种任务。不论是想构建一个电商网站,还是想开发一个淘宝购物助手,淘宝API都能帮助你实现这些目标。下文将介绍淘宝API接口的各种特性,帮助开发者全面了解这一工具,更好地利用它。获取商品数......
  • API接口获取的商品详情该如何使用
    获取到商品API接口返回的商品详情数据后,我们可以将其用于以下方面:商品展示:通过获取到的商品详情数据,我们可以展示商品信息,包括商品名称、价格、商品图片、描述等信息。我们可以将这些信息显示在商品详情页上,以供用户查看和了解,提高用户对商品的认知度和购买兴趣。......