当前位置: 首页 > news >正文

python实现http get pos download

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

#!/usr/bin/python3
# -*- coding: UTF-8 -*-import requests
import sys
import json
import os
import logging
import timedef 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.textprint(content)if res.status_code != 200:if isRaiseNone200:raise ValueError('http不是200')else:print('重试')time.sleep(5)continueelse:return contentexcept requests.exceptions.ConnectionError as e:logging.error('网络连接异常: ', e)print('重试')time.sleep(5)#raiseexcept requests.exceptions.Timeout as e:logging.error('连接超时: ', e)print('重试')time.sleep(5)#raiseexcept requests.exceptions.RequestException as e:logging.error('请求异常: ', e)time.sleep(5)#raiseexcept requests.exceptions.HTTPError as e:logging.error(f'HTTP错误, 状态码: {e.response.status_code}, {e}')time.sleep(5)#raiseexcept ValueError as e:logging.error('响应解析异常: ', e)print('重试')time.sleep(5)#raiseraise 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 contentexcept requests.exceptions.ConnectionError as e:logging.error('网络连接异常: ', e)time.sleep(5)#raiseexcept requests.exceptions.Timeout as e:logging.error('连接超时: ', e)time.sleep(5)#raiseexcept requests.exceptions.RequestException as e:logging.error('请求异常: ', e)time.sleep(5)#raiseexcept requests.exceptions.HTTPError as e:logging.error(f'HTTP错误, 状态码: {e.response.status_code}, {e}')time.sleep(5)#raiseexcept ValueError as e:logging.error('响应解析异常: ', e)time.sleep(5)#raiseraise ValueError('超出重试次数')if __name__ == '__main__':httpGet('http://www.baidu.com')

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTML集成优雅的实时输入清除功能
  • C++ 容器:pair tuple
  • MySQL性能优化篇之SQL语句优化
  • Windows桌面上透明的记事本怎么设置
  • HarmonyOS(43) @BuilderParam标签使用指南
  • 捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性
  • android13 文件管理器无法安装apk 奔溃问题
  • android13 cat /proc/cupinfo没有Serial问题
  • 七款好用的公司电脑监控软件推荐|2024年电脑监控软件干货整理!
  • APP下载二维码的主要用途,制作也简单!
  • 广电影视NAS共享非编存储磁盘阵列
  • ONLYOFFICE 8.1版本版本桌面编辑器测评
  • unordered_map和set
  • VPS拨号服务器:独享的高效与安全
  • MMII 的多模态医学图像交互框架:更直观地理解人体解剖结构和疾病
  • 0基础学习移动端适配
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • co模块的前端实现
  • Fabric架构演变之路
  • java中的hashCode
  • js 实现textarea输入字数提示
  • linux安装openssl、swoole等扩展的具体步骤
  • Python中eval与exec的使用及区别
  • unity如何实现一个固定宽度的orthagraphic相机
  • vagrant 添加本地 box 安装 laravel homestead
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 前端面试之CSS3新特性
  • 使用 QuickBI 搭建酷炫可视化分析
  • 详解NodeJs流之一
  • 小程序 setData 学问多
  • 协程
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #pragma once
  • #QT 笔记一
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (09)Hive——CTE 公共表达式
  • (11)MSP430F5529 定时器B
  • (day18) leetcode 204.计数质数
  • (八)Flask之app.route装饰器函数的参数
  • (第30天)二叉树阶段总结
  • (转)memcache、redis缓存
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *2 echo、printf、mkdir命令的应用
  • .apk 成为历史!
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Core中的去虚
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET企业级应用架构设计系列之技术选型
  • .NET下的多线程编程—1-线程机制概述