使用 Python 从 REST URL 下载文件

使用 Python 从 REST URL 下载文件,可以使用 requests 库来简化文件的下载和保存过程。以下是一个示例代码,展示了如何从给定的 REST API 或 URL 下载文件并保存到本地。

在这里插入图片描述

1、问题背景

我们需要编写一个脚本,从一个支持 REST URL 的网站下载一堆文件。该网站的 GET 请求如下:

GET /test/download/id/5774/format/testTitle HTTP/1.1
Host: testServer.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __utma=11863783.1459862770.1379789243.1379789243.1379789243.1; __utmb=11863783.28.9.1379790533699; __utmc=11863783; __utmz=11863783.1379789243.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=fa844952890e9091d968c541caa6965f; loginremember=Qraoz3j%2BoWXxwqcJkgW9%2BfGFR0SDFLi1FLS7YVAfvbcd9GhX8zjw4u6plYFTACsRruZM4n%2FpX50%2BsjXW5v8vykKw2XNL0Vqo5syZKSDFSSX9mTFNd5KLpJV%2FFlYkCY4oi7Qyw%3D%3D; ma-refresh-storage=1; ma-pref=KLSFKJSJSD897897; skipPostLogin=0; pp-sid=hlh6hs1pnvuh571arl59t5pao0; __utmv=11863783.|1=MemberType=Yearly=1; nats_cookie=http%253A%252F%252Fwww.testServer.com%252F; nats=NDc1NzAzOjQ5MzoyNA%2C74%2C0%2C0%2C0; nats_sess=fe3f77e6e326eb8d18ef0111ab6f322e; __utma=163815075.1459708390.1379790355.1379790355.1379790355.1; __utmb=163815075.1.9.1379790485255; __utmc=163815075; __utmz=163815075.1379790355.1.1.utmcsr=ppp.contentdef.com|utmccn=(referral)|utmcmd=referral|utmcct=/postlogin; unlockedNetworks=%5B%22rk%22%2C%22bz%22%2C%22wkd%22%5D
Connection: close

如果请求成功,它将返回一个 302 响应,如下所示:

HTTP/1.1 302 Found
Date: Sat, 21 Sep 2013 19:32:37 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: http://downloads.test.stuff.com/5774/stuff/picture.jpg?wed=20130921152237&wer=20130922153237&hash=0f20f4a6d0c9f1720b0b6
Vary: User-Agent,Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

我们需要做的是检查是否收到 302 响应。如果不是,则继续执行,如果是,则需要解析出这里显示的 location 参数:

location: http://downloads.test.stuff.com/5774/stuff/picture.jpg?wed=20130921152237&wer=20130922153237&hash=0f20f4a6d0c9f1720b0b6

拿到 location 参数后,我们需要向该 URL 发出另一个 GET 请求以下载文件。我们还需要在会话中维护 Cookie 以便下载文件。

2、解决方案

我们可以使用 requests 库来完成这个任务。requests 库是一个用于发送 HTTP 请求的库,它提供了多种方法来处理 HTTP 响应。

首先,我们需要安装 requests 库:

pip install requests

然后,我们可以使用 requests 库来发送 GET 请求:

import requests# 发送 GET 请求
response = requests.get("http://testServer.com/test/download/id/5774/format/testTitle",headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0"},cookies={"__utma": "11863783.1459862770.1379789243.1379789243.1379789243.1","__utmb": "11863783.28.9.1379790533699","__utmc": "11863783","__utmz": "11863783.1379789243.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)","PHPSESSID": "fa844952890e9091d968c541caa6965f","loginremember": "Qraoz3j%2BoWXxwqcJkgW9%2BfGFR0SDFLi1FLS7YVAfvbcd9GhX8zjw4u6plYFTACsRruZM4n%2FpX50%2BsjXW5v8vykKw2XNL0Vqo5syZKSDFSSX9mTFNd5KLpJV%2FFlYkCY4oi7Qyw%3D%3D","ma-refresh-storage": "1","ma-pref": "KLSFKJSJSD897897","skipPostLogin": "0","pp-sid": "hlh6hs1pnvuh571arl59t5pao0","__utmv": "11863783.|1=MemberType=Yearly=1","nats_cookie": "http%253A%252F%252Fwww.testServer.com%252F","nats": "NDc1NzAzOjQ5MzoyNA%2C74%2C0%2C0%2C0","nats_sess": "fe3f77e6e326eb8d18ef0111ab6f322e","__utma": "163815075.1459708390.1379790355.1379790355.1379790355.1","__utmb": "163815075.1.9.1379790485255","__utmc": "163815075","__utmz": "1

这个简单的 Python 脚本可以帮助我们从 REST URL 下载文件并保存到本地,同时确保了基本的错误处理和内存使用效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EKS+EBS

下面我们介绍一下如何在EKS中实现动态、可扩展高效的存储 总共用到五个内容: 1、ebs卷:物理存储资源,充当底层存储基础 2、ebs csl驱动:桥梁,允许K8s管理ebs 3、PV和PVC: 通过匹配让Pod挂载所需的持久存储 4、Pod的挂载…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录(三)之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

利用EasyPOI导出Excel,内容中含有图片

需求背景 做一个OCR识别的功能,需要导出原图和识别出来的结果的图纸,将数据导出. 解决方案 EasyPOI中可以用字节类型,导出图片,可以将图片存放的url 转成字节,然后导出.但是整个导出过程耗时较久。 具体代码 /*** 草图OCR识别记录-导出.** @param response: Http…

ubuntu 22.04 server python3 包 LTS

ubuntu 22.04 server python3 包 LTS sudo apt install -y python3-pip 不同的用户的,包的 安装位置不一样 系统默认目录 /usr/lib/python3/dist-packages 然后每个用户 各自的目录是 /home/mike/.local/lib/python3.10/site-packages sudo apt install -y pytho…

CSDN做样板,教我们如何为新网站引流

CSDN为我们做了个很好的例子,详细请看下图 亮点分析: 1. 未采用硬广在网站上进行引流。减少了给用户在直觉上的造成的反感; 2. 在GitHub的转跳页面中,植入额外的关联网站链接。虽然对用户解决问题没啥鸟用,但是人家能…

【JAVA】Java基础—面向对象编程:构造方法-构造方法的概念与案例

在Java编程中,构造方法是类的重要组成部分,用于初始化对象的状态,即在创建对象时设置对象的属性。构造方法初始在创建对象时提供必要的参数,从而使对象处于一个有效的状态。 重要性 对象初始化:构造方法允许我们在创建…

【鉴权】 Web 会话管理:Cookie、Session 和 Token 深度解析

目录 引言一、Web 会话管理的基本概念1.1 Cookie、Session 和 Token1.2 为什么需要会话管理? 二、会话管理技术的比较2.1 Cookie 会话管理2.1.1 什么是 Cookie?2.1.2 Cookie 工作原理2.1.3 安全性问题2.1.4 最佳实践 2.2 Session 会话管理2.2.1 什么是 S…

什么是头皮EA(剥头皮EA)?

在许多外汇交易者的眼中,剥头皮交易一直是一个神秘的存在。一部分人认为它是一种“外汇禁招”,而另一部分人则认为它比日内交易更容易盈利。那么,外汇剥头皮到底是什么?它与点差之间又有怎样的关系?本文将对剥头皮交易…

1小时搞定魔乐平台AI应用的构建和离线复现

想象一下,只需一小时,你就能在魔乐平台上构建自己的AI应用,并在本地环境中完美复现。听起来是不是很诱人?今天,我们就来手把手教你如何快速上手魔乐社区的space服务,让你的AI创意变为现实。 一 前言&#x…

微服务架构面试内容整理-分布式配置管理-Nacos Config

Nacos Config 是 Nacos 提供的一个配置管理功能,专门用于动态管理应用的配置。在微服务架构中,Nacos Config 允许开发者集中管理和动态更新各个服务的配置,从而提升系统的灵活性和可维护性。以下是 Nacos Config 的主要特点、工作原理和使用场景: 主要特点 1. 动态配置管理…

yum安装zabbix5.0升级php到74的办法

【背景】 公司时不时有扫描漏洞,之前发现了php漏洞,因开启防火墙,限定IP+端口,暂时躲过升级;现在,老话重提,开启了KPI考核,躲是躲不过去的了,升级吧 【难题】 服务器为centos7,因操作系统问题,只能安装zabbix5.0。当时图省力,官网的办法,都是yum安装,很是简便。…

量化交易系统开发-实时行情自动化交易-3.3.数据采集流程

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来说说数据采集流程,后…

华为ensp防火墙配置(纯享版)

文章目录 前言一、拓扑结构二、配置步骤1.路由器配置(路由器代替互联网)2.server和pc配置3.防护墙配置4.测试 总结 前言 防火墙是生活和项目中不可或缺的一部分,本篇文章对华为的ensp防火墙配置做一个总结。在之前的dhcp配置中有软件的下载地…

区块链技术在数字版权管理中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …

go get 和go install 的区别

go get 和 go install 的主要区别: go get 的行为: 在 Go 1.17 之后,go get 主要用于修改 go.mod,添加、删除或者更新依赖安装的依赖包会记录在项目的 go.mod 文件中下载的包会存储在本地缓存目录: $GOPATH/pkg/mod/ 下示例&…

docker 拉取MySQL8.0镜像以及安装

目录 一、docker安装MySQL镜像 搜索images 拉取MySQL镜像 二、数据挂载 在/root/mysql/conf中创建 *.cnf 文件 创建容器,将数据,日志,配置文件映射到本机 检查MySQL是否启动成功: 三、DBeaver数据库连接 问题一、Public Key Retrieval is not allowed 问题…

云防护单节点2T抗攻击能力意味着什么?

随着互联网的发展,DDoS攻击的规模和频率不断增加,对企业和个人用户的网络服务造成了严重威胁。云防护服务作为一种高效的DDoS防护手段,逐渐成为许多企业的首选。本文将重点讨论云防护单节点2T(太比特每秒)抗攻击能力的…

VUE3中Element table表头动态展示合计信息(不是表尾合计)

一、背景 原型上需要对两个字段动态合计,输出摘要信息 原先想到是的Element的 :summary-method,发现不是动态,所以换监听来实现 二、vue代码 <el-table v-model="loading" :data="itemList"><el-table-column label="药品名称" pro…

9. 基于 Redis 实现排行榜功能

在现代应用场景中&#xff0c;排行榜&#xff08;leaderboard&#xff09;广泛应用于游戏、社交网络、电子商务等领域&#xff0c;通过排行榜来展示用户排名、评分或成就等数据。而Redis作为一个高性能的内存数据库&#xff0c;特别擅长处理需要快速查询和更新的数据&#xff0…

让直播流量不再是“数字游戏”!本地生活+AI数字人的共赢方式 !

如今&#xff0c;数字化浪潮席卷全球&#xff0c;直播行业竞争愈发激烈。许多人都希望能够将自己直播间所产生的热度实时变现&#xff0c;但总是没有头绪或者是把握不住机会&#xff0c;就这样让直播流量从白白流失。即便是有人使用上创新型智能AI数字人系统&#xff0c;也少有…