urllib3学习笔记(二)

简介: urllib3学习笔记(二)

接上文 urllib3学习笔记(一)https://developer.aliyun.com/article/1615874

urllib3学习笔记
urllib3简介

POST请求
1、使用request()方法实现POST请求
使用urllib3模块向服务器发送POST请求时,并不复杂,与发送GET请求相似,只是需要在request()方法中将method参数设置为’POST’, 然后将fields 参数设置为字典类型的表单参数。示例代码如下:

import urllib3    # 导入urllib3模块
urllib3.disable_warnings()               # 关闭ssl警告
url = 'https://www.httpbin.org/post'    # post请求测试地址
params = {
   'name':'Jack','country':'中国','age':30}  # 定义字典类型的请求参数
http = urllib3.PoolManager()             # 创建连接池管理对象
r = http.request('POST',url,fields=params)    # 发送POST请求
print('返回结果:',r.data.decode('utf-8'))

结果如下:

image.png

备注

同样,Python3.7, Python3.9.7可以正常运行以上程序,其他版本报错,即使import ssl也不能解决。

从上图的运行结果看出,JSON信息中的form对应的数据为表单参数,只是chinese_name所对应的并不是’杰克’而是一段Unicode编码,对于这样情况,可以将请求结果编码方式设置为’unicode_escape’。如下:

print(r.data.decode('unicode_escape'))

重试请求
urllib3模块可以自动重试请求,这种相同的机制还可以处理重定向。在默认情况下request()方法的请求重试次数为3次,如果需要修改重试次数可以设置为retries参数。修改重试测试的示例代码如下:

import urllib3    # 导入urllib3模块
urllib3.disable_warnings()               # 关闭ssl警告
url = 'https://www.httpbin.org/get'    # get请求测试地址
http = urllib3.PoolManager()             # 创建连接池管理对象
r = http.request('GET',url)              # 发送GET请求,默认重试请求
r1 = http.request('GET',url,retries=5)   # 发送GET请求,设置5次重试请求
r2 = http.request('GET',url,retries=False) # 发送GET请求,关闭重试请求
print('默认重试请求次数:',r.retries.total)
print('设置重试请求次数:',r1.retries.total)
print('关闭重试请求次数:',r2.retries.total)

运行结果如下:

executed in 1.78s, finished 22:07:40 2022-01-27
默认重试请求次数: 3
设置重试请求次数: 5
关闭重试请求次数: False

处理响应内容
1、获取响应头
发送网络请求后,将返回一个HTTPResponse对象,通过该对象中的info()方法即可获取HTTP响应头信息,该信息为字典(dict)类型的数据,所以需要通过for循环进行遍历才可清晰的看到每条响应头信息内容。示例代码如下:

import urllib3    # 导入urllib3模块

try:
    urllib3.disable_warnings()               # 关闭ssl警告
    url = 'https://www.sohu.com/get'    # get请求测试地址
    http = urllib3.PoolManager()             # 创建连接池管理对象
    r = http.request('GET',url)              # 发送GET请求,默认重试请求
    response_header = r.info()               # 获取响应头
    for key in response_header.keys():      # 循环遍历打印响应头信息
        print(key,':',response_header.get(key))
except:
    pass

运行结果如下:

executed in 484ms, finished 22:20:48 2022-01-27
Content-Type : text/html
Content-Length : 8511
Connection : keep-alive
Server : openresty
Date : Thu, 27 Jan 2022 14:20:48 GMT
Last-Modified : Wed, 27 Oct 2021 12:17:55 GMT
Vary : Accept-Encoding
ETag : "61794373-213f"
Cache-Control : no-cache, no-store, must-revalidate
Referrer-Policy : no-referrer-when-downgrade
Accept-Ranges : bytes
FSS-Cache : MISS from 3951190.5655136.5536880
FSS-Proxy : Powered by 3689042.5130844.5274728

2、JSON信息
如果服务器返回了一条JSON信息,而这条信息中只有某条数据为可用数据时,可以先将返回的JSON数据转为字典(dict)数据,接着直接获取指定键所对应的值即可。示例代码如下:

import urllib3  # 导入urllib3模块
import json  # 导入json模块
try:

    urllib3.disable_warnings()  # 关闭ssl警告
    url = 'https://www.httpbin.org/post'  # post请求测试地址
    params = {
   'name': 'Jack', 'country': '中国', 'age': 30}  # 定义字典类型的请求参数
    http = urllib3.PoolManager()  # 创建连接池管理对象
    r = http.request('POST', url, fields=params)  # 发送POST请求
    j = json.loads(r.data.decode('unicode_escape'))  # 将响应数据转换为字典类型
    print('数据类型:', type(j))
    print('获取form对应的数据:', j.get('form'))
    print('获取country对应的数据:', j.get('form').get('country'))
except:
    pass

运行结果如下:

executed in 1.36s, finished 22:31:42 2022-01-27
数据类型: <class 'dict'>
获取form对应的数据: {
   'age': '30', 'country': '中国', 'name': 'Jack'}
获取country对应的数据: 中国

3、二进制数据
如果响应数据为二进制数据,也可以做出相应的处理。例如,响应内容为图片的二进制数据时,则可以使用open()函数,将二进制数据转换成图片。示例代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/27/22 10:48 PM
# 文件      :处理服务器返回的二进制数据.py
# IDE      :PyCharm


import urllib3  # 导入urllib3模块
try:
    urllib3.disable_warnings()  # 关闭ssl警告
    url = 'http://sck.rjkflm.com:666/spider/file/python.png'  # 图片请求地址
    http = urllib3.PoolManager()  # 创建连接池管理对象
    r = http.request('GET', url)  # 发送网络请求
    print(r.data)  # 打印二进制数据
    f = open('python.png', 'wb+')  # 创建open对象
    f.write(r.data)  # 写入数据
    f.close()  # 关闭
except:
    pass

运行结果如下:

/Users/liuxiaowei/PycharmProjects/爬虫练习/venv/bin/python /Users/liuxiaowei/PycharmProjects/爬虫练习/Urllib3/处理响应内容/处理服务器返回的二进制数据.py
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x0e\x00\x00\x00\\\x08\x02\x00\x00\x00\x10\xe2\xcc\xba\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x.......'

Process finished with exit code 0

image.png
2021-08-23
获得帮助
多层次的帮助

whatis

command --help

man and info

/usr/share/doc/

Red Hat documentation

其他网站和搜索

内部命令:

  • help command

  • man bash

外部命令:

(1) command --help

 command -h

(2)使用手册(manual)

 man command

(3)信息页

    info command

(4)程序自身的帮助文档

    README

    INSTALL

    ChangeLog

(5)程序官方文档

    官方站点:Documentation

(6)发行版的官方文档

(7)Google

man命令

  • 提供命令帮助的文件
  • 手册页存放在/usr/share/man
  • 几乎每个命令都有man的“页面”
  • man页面分组为不同的“章节“ whatis command查章节
  • man命令操作方法:使用less命令实现
    space,^v,^f,^F:向文件尾翻屏

    b,^b:向文件首部翻屏

    d,^d:向文件尾部翻半屏

    u,^u:向文件首部翻半屏

    RETURN,^N,e,^E or j or ^J:向文件尾部翻一行         y or ^Y or ^P or k or ^K:向文件首部翻一行

    q:退出

    #:跳转至第#行

    1G:回到文件首部

    G:翻至文件尾部

man搜索
/KEYWORD:

    以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;

    n:下一个

    N:上一个

?KEYWORD:

    以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;

    n:跟搜索命令同方向,下一个

    N:跟搜索命令方向反方向,上一个

man命令的配置文件:/etc/man.config | man_db.conf
MANPATH /PATH/TO/SOMEWHERE:指明man文件搜索位置

man -M /PATH/TO/SOMEWHERE:到指定位置搜索

COMMAND命令的手册页并显示

中文man需安装包man-pages-zh-CN

man章节
1:用户命令

2:系统调用

3:C库调用

4:设备文件及特殊文件

5:配置文件格式

6:游戏

7:杂项

8:管理类的命令

9:Linux内核API

man帮助段落说明
帮助手册中的段落说明:

    NAME 名称及简要说明

    SYNOPSIS 用法格式说明

            []               可选内容

            <>            必选内容

            a|b           二选一

            {}              分组

            ......           同一内容可以出现多次

    DESCRIPTION        详细说明

    OPTIONS                 选项说明

    EXAMPLES             示   例

    FILES                       相关文件

    AUTHOR                 作  者

    COPYRIGHT          版本信息

    REPORTING  BUGS bug    信息

    SEE ALSO               其他帮助参考

man帮助
查看man手册页

    man [章节]  keyword

列出所有帮助

    man -a keyword

搜索man手册

    man -k keyword 列出所有匹配的页面

    使用whatis 数据库

相当于whatis

    man -f keyword

打印man帮助文件的路径

    man -w [章节] keyword

导航info页
方向键,PaUp,PgDn导航

    Tab键移动到下一个链接

    d 显示主题目录

    Home显示主题首部

    Enter进入选定链接

    n/p/u/l进入下/前/上一层/最后一个链接

    s文字 文本搜索

    q退出info

Linux平台文件系统管理
磁盘命令:

查看各分区使用情况

#df  -h

#lsblk

查看所有分区

#fdisk -l

查看所有交换分区

#swapon -s

查看根目录下所有文件夹(目录)大小

#du -sh  /*

查看指定目录大小
du -sh /root

网络命令
查看所有网络接口属性

[root@Bruce_Liu ~]#ifconfig

查看带宽

[root@Bruce_Liu ~]#ethtool 网卡名

查看路由表

[root@Bruce_Liu ~]#route -n

查看所有监听端口

[root@Bruce_Liu ~]#netstat -lntp

查看所有已建立连接

[root@Bruce_Liu ~]#netstat -antp

查看某端口使用情况

[root@Bruce_Liu ~]#lsof -i:端口号

或者使用

[root@Bruce_Liu ~]#netstat -apn|grep 端口号

查看所有进程
查看进程

[root@Bruce_Liu ~]#ps -ef,使用ps -ef|gerp tomcat过滤
#可以看到进程占用CPU,内存情况 
[root@Bruce_Liu ~]#ps -aux
#查看实时显示进程状态
[root@localhost ~]# top

网络IO:
iftop -n ,ifstat,dstat -nt,sar -n DEV 2 3

文件系统
文件和目录被组织成一个单根倒置树结构

文件系统从根目录下开始,用“/”表示

根文件系统(ROOTFS):root filesystem

文件名称区分大小写

以.开头的文件为隐藏文件

路径分隔符/

文件有两类数据:

    元数据:metadata  文件属性信息

    数据:data  具体内容
  • 文件系统分层结构:LSB Linux Standard Base
  • FHS:(Filesystem Hierarchy Standard)

http://www.pathname.com/fhs/

文件名规则
1.文件名最长255个字节

2.包括路径在内文件名称最长4095个字节

3.蓝色--->目录 绿色--->可执行文件 红色--->压缩文件 浅蓝色--->链接文件(相当于windows快捷方式) 灰色-->其他文件

4.除了斜杠和NUL,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。

标准Linux文件系统(如ex4),文件名称大小写敏感。例如:

MAIL,Mail,mail, mAiL

技巧:创建一个"-a"文件名,#touch -a,touch "-a"都是错误的,#touch path/-a可以,加上路径,如果根目录就是/-a,如果其他目录就是path/-a

字符文件(c开头)

[root@Bruce_Liu ~]#ll /dev/zero

用处:在磁盘快速生成大文件,命令如下

[root@Bruce_Liu ~]#dd if=/dev/zero of=data/bigfile bs=1M count=1024
#data/bigfile data路径下的bigfile文件
if:input file缩写
of:output file 缩写
bs:block size

显示当前工作路径pwd:printing working directory
绝对路径和相对路径
绝对路径
以正斜杠开始 /

    完整的文件的位置路径

    可用于任何想指定一个文件名的时候

相对路径
不以斜线开始

    指定相对于当前工作目录或某目录的位置

    可以作为一个简短的形式指定一个文件名

基名:basename
取最后文件(文件夹)名:network

[root@Bruce_Liu ~]#basename /etc/sysconfig/network

目录名:dirname
取路径名:/etc/sysconfig

[root@Bruce_Liu ~]#dirname /etc/sysconfig/network

切换终端命令

[root@Bruce_Liu ~]#chvt 2
#2终端号,chvt:change virtual terminal缩写

开机启动图形化界面切换

[root@Liu_Bruce ~]#systemctl get-default
#graphical.target 代表开机时启动图形化界面
#multi-user.target 代表开机启动dos界面
如果想要进入图形化界面
#systemctl set-default graphical.target

如果开机进入dos界面,输入命令:
#systemctl set-default multi-user.target

DOS界面与图形化界面切换快捷键

图形到dos:ctrl+alt+f2

dos到图形化:startx

或者在命令行输入init 3切到dos界面

init 5切到图形界面

相关文章
|
2月前
|
安全 网络安全 Python
urllib3学习笔记(一)
urllib3学习笔记(一)
|
3月前
|
数据采集 Python
urllib
【8月更文挑战第18天】
31 1
|
6月前
|
数据采集 应用服务中间件 数据安全/隐私保护
Python爬虫urllib详解#3
摘要:urllib深度解析与高级用法、robots协议分析【2月更文挑战第9天】
97 1
Python爬虫urllib详解#3
|
6月前
|
安全 测试技术 API
urllib3库的介绍以及使用
`urllib3`是Python的HTTP库,支持HTTP/HTTPS,自动管理连接池,提供代理、证书配置,重定向处理等功能。其优势在于连接池管理和HTTPS支持。要安装,使用`pip install urllib3`。发起HTTP请求如`http.request(&#39;GET&#39;, &#39;http//example.com&#39;)`。处理响应包括状态码、头部和内容。高级功能包括连接池管理、超时和重试策略。注意线程安全、资源释放及错误处理。官方文档和相关文章可提供更多信息。
154 0
|
编解码 Python
urllib库(中)
urllib库(中)
50 0
|
数据处理 Python
使用urllib库简单入门
使用urllib库简单入门
101 0
|
数据采集 XML 存储
urllib模块的使用
urllib模块的使用
54 0
|
应用服务中间件 nginx Python
|
前端开发 Python
urllib的一些使用案例
urllib的一些使用案例
149 0
|
数据采集 Python
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
125 0
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制