百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python访问网络 urllib.request 发送HTTP 请求

toyiye 2024-06-21 12:40 11 浏览 0 评论

使用 python urllib 模块发出 Web 请求。

urllib模块是内置于Python标准库中的标准模块,允许用户使用URL(统一资源定位器)。可以用它做很多简洁的事情,例如访问API资源,发出不同类型的HTTP请求,如GET,POST,PUT,DELETE等。

如何使用 urllib 模块来访问 API 资源。使用 JsonPlaceholder进行虚拟的 REST API 调用,这是一个非常简洁的工具。


import urllib.request

向 google.com 提出请求,看看得到了什么。

import urllib.request

with urllib.request.urlopen("https://www.google.com/") as url:
    print(url.read(300))

在这里,使用了一个上下文管理器,它可以优雅地处理 url 的打开和关闭。urlopen() 函数返回一个字节对象,打印它的前 300 个字节。

b'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IN"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="j2RUvuN1fVmpA'
[Finished in 7.3s]

如果知道字节对象的编码,可以打印字符串结果。在上述输出的元标记中可以清楚地看到编码是utf-8。

import urllib.request

with urllib.request.urlopen("https://www.google.com/") as url:
    print(url.read(300).decode("utf-8"))

上面的代码现在将一个 utf-8 解码字节对象作为字符串返回,如果我们需要对它做一些事情,可以稍后解析它。

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IN"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="MnpsG49CZsHqd
[Finished in 2.0s]

获取请求。

GET 请求用于从 URL 终结点检索特定资源。让向 JsonPlaceholder API 发出一个 GET 请求来获取一些待办事项。

import urllib.request

req = urllib.request.Request(url = 'https://jsonplaceholder.typicode.com/todos/1')

with urllib.request.urlopen(req) as resp:
    print(resp.read().decode('utf-8'))

在这里,将 url 参数传递给 urllib.request 上定义的 Request 方法。读取响应对象并对其进行解码。如果仔细检查代码,由于我们不指定任何数据参数(这基本上意味着它是 None),因此该方法默认为 GET。

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}
[Finished in 4.5s]

这里的输出实际上看起来像一个带有键值对的 python 字典,但现实是它只是一个字符串。可以通过将解码的响应对象包装在 type() 中来验证它,并查看其类型为 string。

如果需要访问此响应对象的各种键值对,需要使用 json.loads() 方法解析它,需要 json 模块

import json
import urllib.request

# We can now control the number of todos we want to be returned.
num_of_todos = 1

req = urllib.request.Request(url=f'https://jsonplaceholder.typicode.com/todos/{num_of_todos}')

with urllib.request.urlopen(req) as resp:
    data = json.loads(resp.read().decode("utf-8"))
    print(data)
    print(type(data))
    print(data["title"])


现在返回的数据确实是一个python字典,可以像往常一样访问键值对。

{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
<class 'dict'>
delectus aut autem
[Finished in 1.7s]

开机自检请求。

将一些数据发送到服务器以创建或更新资源时,使用 POST 方法。

import json
import urllib.request

# This is our Todo
data = {
    "userId": 101,
    "id": 100,
    "title": "This is a POST request",
    "completed": True
}

# Dump the todo object as a json string
data = json.dumps(data)

req = urllib.request.Request(url = 'https://jsonplaceholder.typicode.com/todos/', data = bytes(data.encode("utf-8")), method = "POST")

# Add the appropriate header.
req.add_header("Content-type", "application/json; charset=UTF-8")

with urllib.request.urlopen(req) as resp:
    response_data = json.loads(resp.read().decode("utf-8"))
    print(response_data)

一个包含必要键值对的 python 字典。将其转储为 JSON 字符串。将数据作为字节对象传递给 Request 方法的数据参数。 将 Content-type 标头添加为 application/json,这表示希望发布的数据是 JSON 对象。读取和解码响应对象并打印它。

{'userId': 101, 'id': 201, 'title': 'This is a POST request', 'completed': True}
[Finished in 2.0s]


放置请求。

需要修改服务器上的某个资源, 使用 PUT 请求。

import json
import urllib.request

# This is our Todo
data = {
    "userId": 1,
    "id": 1,
    "title": "This is a PUT request",
    "completed": False
}

# Dump the todo object as a json string
data = json.dumps(data)

req = urllib.request.Request(url = 'https://jsonplaceholder.typicode.com/todos/1', data = bytes(data.encode("utf-8")), method = "PUT")

# Add the appropriate header.
req.add_header("Content-type", "application/json; charset=UTF-8")

with urllib.request.urlopen(req) as resp:
    response_data = json.loads(resp.read().decode("utf-8"))
    print(response_data)

大部分代码保持不变。唯一的区别是 将方法指定为 PUT

{'userId': 1, 'id': 1, 'title': 'This is a PUT request', 'completed': False}
[Finished in 2.0s]

删除请求

删除服务器上的特定资源, 使用 DELETE 请求。

import json
import urllib.request

req = urllib.request.Request(url = 'https://jsonplaceholder.typicode.com/todos/1', method = "DELETE")

with urllib.request.urlopen(req) as resp:
    response_data = json.loads(resp.read().decode("utf-8"))
    print(response_data)

只需将方法指定为 DELETE 要删除的待办事项(即 /todos/1)。

{}
[Finished in 2.6s]

响应是一个空对象, 已经成功删除了待办事项。


#妙笔生花创作挑战#

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码