【python库】requests

文章目录

  • 基本用法
  • 进阶用法


requests是Python中一个非常流行的用于发送HTTP请求的库。它允许你发送HTTP/1.1请求,极其简单,功能强大。

基本用法

以下是一个简单的使用requests的例子:

import requests

# 发送GET请求
response = requests.get('http://www.example.com')

# 输出响应的文本
print(response.text)

# 输出响应的状态码
print(response.status_code)

在上面的例子中,我们首先导入了requests模块,然后使用get函数发送了一个GET请求到www.example.com。然后我们打印了服务器返回的响应文本和状态码。

requests库还可以发送POST请求,并且可以携带数据:

import requests

# 发送POST请求
response = requests.post('http://www.example.com', data = {'key':'value'})

# 输出响应的文本
print(response.text)

在这个例子中,我们使用post函数发送了一个POST请求,并且携带了一个字典作为数据。

requests库还支持会话,可以保持某些参数,例如cookies,对于需要登录的网站非常有用:

import requests

# 创建一个session对象
s = requests.Session()

# 发送GET请求
s.get('http://www.example.com')

# 发送POST请求
s.post('http://www.example.com', data = {'key':'value'})

在这个例子中,我们首先创建了一个Session对象,然后使用这个对象发送GET和POST请求。这样,requests会自动处理cookies和其他会话相关的参数。

进阶用法

requests库更高级的用法:

  1. 处理JSON:如果你的API返回的是JSON格式的数据,你可以直接通过.json()方法解析它:

    import requests
    
    response = requests.get('http://www.example.com')
    data = response.json()
    print(data)
    
  2. 上传文件:你可以使用requests库来上传文件:

    import requests
    
    url = 'http://www.example.com'
    files = {'file': open('path_to_file', 'rb')}
    
    response = requests.post(url, files=files)
    
  3. 处理重定向:默认情况下,requests会自动处理重定向。但是,你也可以选择关闭这个功能:

    import requests
    
    response = requests.get('http://www.example.com', allow_redirects=False)
    
  4. 处理认证:你可以使用requests库来处理HTTP认证:

    import requests
    
    response = requests.get('http://www.example.com', auth=('username', 'password'))
    
  5. 设置超时:你可以设置请求的超时时间,如果服务器在指定的时间内没有响应,requests会抛出一个Timeout异常:

    import requests
    
    response = requests.get('http://www.example.com', timeout=5)
    
  6. 设置代理:你可以使用requests库来设置代理:

    import requests
    
    proxies = {
        'http': 'http://10.10.1.10:3128',
        'https': 'http://10.10.1.10:1080',
    }
    
    response = requests.get('http://www.example.com', proxies=proxies)
    
  7. 使用Cookies:你可以使用requests库来处理Cookies:

    import requests
    
    cookies = dict(cookies_are='working')
    
    response = requests.get('http://www.example.com', cookies=cookies)
    
  8. 自定义Headers:你可以添加或修改请求头信息。

    headers = {'User-Agent': 'Mozilla/5.0'}
    response = requests.get('http://www.example.com', headers=headers)
    
  9. 流式下载:对于大文件,如视频、音频等,你可以使用流式下载,避免一次性加载整个文件到内存中。

    response = requests.get('http://www.example.com/file.mp4', stream=True)
    with open('file.mp4', 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024): 
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)
                f.flush()
    
  10. SSL验证:你可以选择是否对HTTPS请求进行SSL证书验证,或者指定自己的证书。

    response = requests.get('https://www.example.com', verify=False)
    
    # 或者使用自己的证书
    response = requests.get('https://www.example.com', cert=('/path/server.crt', '/path/key'))
    
  11. 连接池与适配器requests库允许你使用连接池和适配器,这可以提高性能。

    from requests.adapters import HTTPAdapter
    s = requests.Session()
    s.mount('http://', HTTPAdapter(max_retries=3))
    
  12. 异步请求:虽然requests库本身不支持异步请求,但你可以使用requests-async库来实现异步请求。

  13. 错误处理requests库提供了一些异常类,你可以使用它们来处理网络错误、超时、重定向等问题。

  14. 处理HTTP错误状态:当服务器返回一个非200的HTTP状态码时,requests会抛出一个HTTPError异常。你可以捕获这个异常并处理它。

    try:
        response = requests.get('http://www.example.com')
        response.raise_for_status()  # 如果响应状态码不是200,将抛出HTTPError异常
    except requests.exceptions.HTTPError as err:
        print(err)
    
  15. 使用环境变量requests可以使用环境变量中的代理和证书。

    os.environ['http_proxy'] = 'http://10.10.1.10:3128'
    os.environ['https_proxy'] = 'http://10.10.1.11:1080'
    
    response = requests.get('http://www.example.com')
    
  16. 使用CookieJarrequests使用CookieJar对象来处理cookie,你可以创建自己的CookieJar对象并将其传递给requests

    from requests.cookies import RequestsCookieJar
    
    jar = RequestsCookieJar()
    jar.set('tasty_cookie', 'yum', domain='www.example.com', path='/')
    jar.set('gross_cookie', 'blech', domain='www.example.com', path='/')
    
    response = requests.get('http://www.example.com', cookies=jar)
    
  17. 使用Event Hooksrequests提供了事件钩子,你可以在请求的不同阶段执行自定义的函数。

    def print_response(resp, *args, **kwargs):
        print("Response was received!")
        return resp
    
    response = requests.get('http://www.example.com', hooks=dict(response=print_response))
    
  18. 使用Session对象Session对象可以保存某些参数,如cookies,对于需要登录的网站非常有用。而且,Session对象可以复用底层的TCP连接,这对于同一域名下的多个请求来说,可以提高效率。


生在此侧,死在彼侧。我在此侧,不在彼侧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扩展阅读:什么是中断

如果用一句话概括操作系统的原理,那就是:整个操作系统就是一个中断驱动的死循环,用最简单的代码解释如下: while(true){doNothing(); } 其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成的。我们点击一下鼠标,敲击一下键盘,执行一个程序,…

马斯克的SpaceX发展历史:从濒临破产到全球领先

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Space Exploration Technologies Corp.,简称SpaceX,是由埃隆马斯克(Elon Musk)于2002年创办的一…

观察者模式在金融业务中的应用及其框架实现

引言 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,使得多个观察者对象同时监听某一个主题对象。当这个主题对象发生变化时,会通知所有观察者对象,使它们能够自动更新。…

淀山湖之行随笔

我们仰望清新,但又不得不被世俗所伴。 近日上海开始进入梅雨季节,每天大大小小的雨水不断,整个环境也格外的潮湿,不过已经逐渐习惯这种气候,所谓的见怪不怪。 今日是周日,思绪好久,准备去淀山湖…

混合专家模型(MoE)的前世今生

在文章《聊聊最近很火的混合专家模型(MoE)》中,我们简单介绍了MoE模型的定义和设计,并且比较了MoE和Dense模型的区别,今天我们继续来回顾一下MoE模型发展的历史和最新的发展现状。 从去年GPT-4发布至今,MoE…

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 引言: crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…

C++ | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {unordered_map<int, int> rightmostValueAtDepth;int max_depth -1;stack<TreeNode*> nodeStack;stack<int> depthStack;nodeStack.push(ro…

【数据结构】(C语言):二叉搜索树

二叉搜索树&#xff1a; 树不是线性的&#xff0c;是层级结构。基本单位是节点&#xff0c;每个节点最多2个子节点。有序。每个节点&#xff0c;其左子节点都比它小&#xff0c;其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。…

leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树 题目描述 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(n…

鱼叉式钓鱼

鱼叉式网络钓鱼&#xff1a; 鱼叉式网络钓鱼是一种网络钓鱼形式&#xff0c;它针对特定个人或组织发送定制消息&#xff0c;旨在引发特定反应&#xff0c;例如泄露敏感信息或安装恶意软件。这些攻击高度个性化&#xff0c;使用从各种来源收集的信息&#xff0c;例如社交媒体资…

sky18流水线设计

1.最大时钟频率确定 时钟周期要大于等于组合逻辑的delay&#xff08;最大的那条delay&#xff09; Freq_max(Mhz) 1000/T_delay(ns); 数据吞吐率Throughput Freq_max *Toggle_rate;//Toggle_rate&#xff1a;如两个时钟&#xff0c;输入变一次&#xff0c;就是50%&#xff1b…

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…

大模型系列课程学习-基于2080TI-22G魔改卡搭建双卡大模型训练平台(双系统)

1.选择合适的硬件配置 再配置电脑之前&#xff0c;需要确认自己需要的显存大小、主板、内存条、电源、散热等核心配件。经过前期调研&#xff0c;选择的硬件配置如下&#xff1a; &#xff08;1&#xff09;主板&#xff1a;华南X99_F8D(DDR4主板)&#xff0c;因为需要支持双卡…

1Panel运维利器:功能详解与实操指南

官网地址:https://1panel.cn/ 1Panel简介 1Panel是杭州飞致云信息科技有限公司旗下产品&#xff0c;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;于2023年3月推出。 名称&#xff1a;1Panel开源Linux面板 所属公司&#xff1a;杭州飞致云信息科技有限公司 编写语…

基于HarmonyOS NEXT开发智能提醒助手

目录 目录 目录 前言 关于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手设计 1、系统架构 2、功能模块 智能提醒助手的应用场景 智能提醒助手的竞争力 具体技术实现 未来展望 结束语 前言 随着智能设备的普及和物联网技术的飞速发展&#xff0c;人们对于智能…

忙忙碌碌的混沌之中差点扑了个空而错过年中这条线

文章目录 前言初见端倪混沌初始力不从心心力交瘁拾遗补缺总结 前言 突然意识到过完这个周末已经7月份了&#xff0c;他预示着我的2024年已经过半了&#xff0c;过年回家仿佛还是昨天的事情&#xff0c;怎么转眼间已经到了年中了。心里还是不愿承认这件事&#xff0c;翻开自己2…

Nacos配置中心客户端源码分析(一): 客户端如何初始化配置

本文收录于专栏 Nacos 推荐阅读&#xff1a;Nacos 架构 & 原理 文章目录 前言一、NacosConfigBeanDefinitionRegistrar二、NacosPropertySourcePostProcessor三、AbstractNacosPropertySourceBuilder总结「AI生成」 前言 专栏前几篇文章主要讲了Nacos作为服务注册中心相关…

github主页这样优化,让人眼前一亮

我的主页&#xff08;一之十六&#xff09; 1. 创建与账户ID同名的仓库 注意&#xff1a;记得勾选Add a README file 2. markdown语法自定义README.md 3. 辅助工具 优秀profile&#xff1a;https://zzetao.github.io/awesome-github-profile/动态文字&#xff1a;https://r…

SpringMVC(1)——入门程序+流程分析

MVC都是哪三层&#xff1f;在Spring里面分别对应什么&#xff1f;SpringMVC的架构是什么&#xff1f; 我们使用Spring开发JavaWeb项目&#xff0c;一般都是BS架构&#xff0c;也就是Browser&#xff08;浏览器&#xff09;-Server&#xff08;服务器&#xff09;架构 这种架构…

谷歌开发者新号上架攻略:开发者实战经验分享

前段时间&#xff0c;不少开发者朋友们在纷纷在吐槽新账号没法上架成功。以前谷歌对新号是真的很严格&#xff0c;但现在情况似乎有所好转。 今天&#xff0c;和大家聊聊如何在新号成功上架上“快人一步”&#xff0c;以及怎样增加账号权重提高上架成功率。 首先&#xff0c;我…