python实现http get post download接口

简介

python实现http get post download
使用requests, 加上重试机制,超时机制.

GET 请求

  1. 定义和用途:
    GET 请求用于从指定的资源获取数据。它是最常见的 HTTP 请求方法之一,通常用于获取网页内容、查询数据库、获取 API 数据等。
    例如,当你在浏览器中输入一个网址时,浏览器会发送一个 GET 请求到服务器,以获取该网页的内容。
  2. 特点:
    GET 请求是安全的,即它不会对服务器上的资源进行修改。它也是幂等的,意味着多次发送相同的 GET 请求应该产生相同的结果。
    GET 请求的参数通常附加在 URL 的末尾,以 “?” 分隔,多个参数之间用 “&” 连接。例如:https://www.example.com/api?param1=value1&param2=value2。

POST 请求

  1. 定义和用途:
    POST 请求用于向指定的资源提交数据,通常用于创建新的资源、提交表单数据、上传文件等。
    例如,当你在网站上注册用户时,你的浏览器会发送一个 POST 请求到服务器,包含你的注册信息。
  2. 特点:
    POST 请求不是安全的,也不是幂等的,因为它可能会对服务器上的资源进行修改。
    POST 请求的参数通常包含在请求体中,可以是表单数据、JSON 数据等。

文件下载

  1. 定义和用途:
    文件下载是从服务器获取文件并保存到本地设备的过程。可以通过 HTTP GET 请求来实现文件下载,通常用于下载软件安装包、文档、图片、视频等。

实现方法介绍

  1. http get
    使用requests.request('get’方法向指定的 URL 发送了一个 GET 请求,并获取了响应。可以通过response.status_code检查请求是否成功,通过response.text获取响应的文本内容。
  2. http post
    使用requests.post方法发送了一个 POST 请求
  3. http download
    首先发送一个 GET 请求并下载文件内容。
    使用requests库可以方便地进行 HTTP 请求和文件下载操作,但在实际应用中可能需要处理各种异常情况、设置请求头、进行身份验证等,

具体实现代码

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import requests
import sys
import json
import os
import logging
import time

def httpGet(urlStr, headers = None, params = None, data = None, isRaiseNone200=False):
    print('url:' + urlStr)
    print('params:', params)

    MAX_RETRY_COUT = 5
    # 加个重试次数,可根据需要定制哪些情况下进行重试,如果不重试就把raise的注释去掉
    for retTryPos in range(MAX_RETRY_COUT):
        try:
            # 这里timeout要加,设置连接与访问超时时间,否则可能遇到http卡死挂住的情况
            res = requests.request('get', urlStr, params=params, headers=headers, data=data, timeout=(15, 20))
            content = res.text
            print(content)

            if res.status_code != 200:
                if isRaiseNone200:
                    raise ValueError('http不是200')
                else:
                    print('重试')
                    time.sleep(5)
                    continue
            else:
                return content
        except requests.exceptions.ConnectionError as e:
            logging.error('网络连接异常: ', e)
            print('重试')
            time.sleep(5)
            #raise
        except requests.exceptions.Timeout as e:
            logging.error('连接超时: ', e)
            print('重试')
            time.sleep(5)
            #raise
        except requests.exceptions.RequestException as e:
            logging.error('请求异常: ', e)
            time.sleep(5)
            #raise
        except requests.exceptions.HTTPError as e:
            logging.error(f'HTTP错误, 状态码: {e.response.status_code}, {e}')
            time.sleep(5)
            #raise
        except ValueError as e:
            logging.error('响应解析异常: ', e)
            print('重试')
            time.sleep(5)
            #raise

    raise ValueError('超出重试次数')

def httpDownload(urlStr, saveFile):
    print('download url:' + urlStr)
    savePath = os.path.dirname(saveFile)
    if not os.path.exists(savePath):
        print('mkdir:', savePath)
        os.makedirs(str(savePath))

    r = requests.get(urlStr, timeout=(15, 30))
    if r.status_code != 200:
        print('http返回:', r.content)
        print('http code:', r.status_code)
        raise ValueError('code不是200')

    tmpFile = saveFile + '.tmp'
    with open(tmpFile, 'wb') as f:
        f.write(r.content)
        f.close()
        os.rename(tmpFile, saveFile)

def httpPost(urlStr, headers, postData):
    print('url:' + urlStr)
    try:
        token = getToken()
        datas = json.dumps(postData)
        rc = requests.post(url=urlStr, data=datas, headers=headers, timeout=(8, 20))
        print('post:' + str(datas))
        content = (rc.text)
        print(content)
        if rc.status_code != 200:
            raise ValueError('code不是200')
        return content
    except requests.exceptions.ConnectionError as e:
        logging.error('网络连接异常: ', e)
        time.sleep(5)
        #raise
    except requests.exceptions.Timeout as e:
        logging.error('连接超时: ', e)
        time.sleep(5)
        #raise
    except requests.exceptions.RequestException as e:
        logging.error('请求异常: ', e)
        time.sleep(5)
        #raise
    except requests.exceptions.HTTPError as e:
        logging.error(f'HTTP错误, 状态码: {e.response.status_code}, {e}')
        time.sleep(5)
        #raise
    except ValueError as e:
        logging.error('响应解析异常: ', e)
        time.sleep(5)
        #raise

    raise ValueError('超出重试次数')


if __name__ == '__main__':
    httpGet('http://www.baidu.com')

作者:帅得不敢出门 csdn原创谢绝转载收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值