urllib是python御用的易用的轻便模块,curl是Linux功能强大的命令行工具,都是参与Web的利器。
(笔记模板由python脚本于2024年07月10日 18:41:12创建,本篇笔记适合喜欢Python和Linux的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/140303237
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ curl指令&urllib模块
- 1、curl指令
- 获取网页内容
- 将输出保存到文件
- 发送POST请求
- 发送带有头部的请求
- 使用代理
- 上传文件
- 下载文件
- 显示响应头信息
- 使用cookie
- 使用用户代理
- 忽略SSL证书验证
- curl官网地址
- 2、curl的参数选项
- 我目前对crul的唯一应用
- 3、Linux命令行中指令中的`>`重定向
- 4、urllib的一般操作
- 打开URL并读取内容
- 发送GET请求
- 发送POST请求
- 处理异常
- 解析URLs
- URL编码和解码
- 5、urllib高阶操作
- 使用`OpenerDirector`处理多个请求
- 使用`build_opener`自定义请求
- 使用`ProxyHandler`设置代理
- 使用`HTTPCookieProcessor`处理Cookies
- 使用`Request`对象自定义请求
- 6、curl vs urllib
- 7、os.system LINUX指令容器
- 8、总结
◆ curl指令&urllib模块
1、curl指令
curl
是一个在
L
i
n
u
x
Linux
Linux、
W
i
n
d
o
w
s
Windows
Windows和
m
a
c
O
S
macOS
macOS上广泛使用的命令行工具,用于传输数据。它支持许多协议,包括HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、LDAP、LDAPS、DICT、FILE、TELNET、IMAP、POP3、SMTP
等。
以下是curl
的一些基本用法和选项:
获取网页内容
curl http://www.example.com
这会将http://www.example.com
的HTML内容输出到终端。
将输出保存到文件
curl -o filename.html http://www.example.com
这会将网页内容保存到名为filename.html
的文件中。
发送POST请求
curl -d "param1=value1¶m2=value2" -X POST http://www.example.com/resource
这会发送一个POST请求到指定的URL,并附带表单数据。
发送带有头部的请求
curl -H "Content-Type: application/json" -X POST -d '{"key1":"value1", "key2":"value2"}' http://www.example.com/resource
这会发送一个带有自定义头部的POST请求,并将JSON数据作为请求体。
使用代理
curl -x http://proxy.example.com:8080 http://www.example.com
这会通过指定的代理服务器发送请求。
上传文件
curl -F "file=@path/to/local/file" http://www.example.com/upload
这会将本地文件作为多部分POST请求上传到服务器。
下载文件
curl -O http://www.example.com/file.tar.gz
这会以原始文件名下载文件。
显示响应头信息
curl -I http://www.example.com
这会显示服务器的响应头信息,而不显示实际内容。
使用cookie
curl -b cookies.txt -c cookies_new.txt http://www.example.com
这会发送存储在cookies.txt
中的cookie,并将服务器设置的cookie保存到cookies_new.txt
中。
使用用户代理
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://www.example.com
这会设置用户代理字符串,以模仿不同的浏览器。
忽略SSL证书验证
curl -k https://www.example.com
这会在SSL连接中忽略证书验证,适用于自签名证书或无效证书。
curl官网地址
以上列举的示例,是curl
的一些常用选项和用法。curl
是一个非常强大的工具,它有许多其他选项和功能,可以通过阅读手册页(man curl
)或访问官方文档来了解更多信息。(官方文档地址:https://curl.se,纯英文页面)
2、curl的参数选项
curl
是一种在命令行或脚本中(
向
/
从
向/从
向/从)服务器传输数据的工具,支持许多协议,如 HTTP、HTTPS、FTP 等。当使用 curl
命令时,你可以传递各种参数来定制请求的行为。
- 以下是一些常见的
curl
参数类型:
- 基本选项:
-A
或--user-agent
: 设置用户代理字符串。-d
或--data
: HTTP POST 数据。-D
或--dump-header
: 将响应头写入文件。-F
或--form
: 提交表单数据。-H
或--header
: 添加 HTTP 头。-I
或--head
: 仅获取 HTTP 头。-o
或--output
: 将输出写入文件。-O
或--remote-name
: 将输出写入远程文件名。-u
或--user
: 设置服务器的用户和密码。-X
或--request
: 设置 HTTP 请求方法。
- 连接选项:
-c
或--cookie
: 读取 cookies。-b
或--cookie-jar
: 将 cookies 保存到文件。-e
或--referer
: 设置引用页。-L
或--location
: 跟随重定向。--connect-timeout
: 设置连接超时时间。--max-time
: 设置最大允许操作时间。
- 数据传输选项:
-T
或--upload-file
: 上传文件。-C
或--continue-at
: 断点续传。
- SSL/安全选项:
--cert
: SSL 证书。--key
: SSL 密钥。--cacert
: CA 证书。-k
或--insecure
: 允许不安全的 SSL 连接。
- 其他选项:
-v
或--verbose
: 显示详细操作信息。-q
或--disable
: 禁用进度/速率输出。--silent
: 静默模式。--version
: 显示版本信息。--help
: 显示帮助信息。
这些参数可以根据需要进行组合,以实现特定的网络请求。例如,如果你想以 POST 方法发送数据到一个 URL,并设置自定义的 HTTP 头,你可以使用如下命令:
curl -d "param1=value1¶m2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://example.com
这里的 -d
表示发送的数据,-H
表示添加的 HTTP 头,而 -X
指定了请求方法。
“静默选项”
- 其它选项
--silent
: 静默模式,也可以写成-s
的形式。
-s
参数是curl
命令行工具的一个选项,它用于静默模式(silent mode)。当使用-s
参数时,curl
不会输出任何进度或错误信息。这在你想要脚本化curl
使用或者不希望看到命令行输出时非常有用。
例如,如果你想要下载一个文件而不显示任何进度条或错误信息,你可以使用如下命令:
curl -s -o filename.zip http://example.com/file.zip
在这个例子中,-s
使得 curl
在下载过程中保持静默,而 -o
参数指定了下载文件的本地名称。
结合 -s
参数的其他选项,你可以进一步控制 curl
的行为。例如,如果你想要在静默模式下发送一个带有自定义头的 POST 请求,你可以这样做:
curl -s -d "param1=value1¶m2=value2" -H "Custom-Header: Value" -X POST http://example.com
在这个例子中,-s
保证命令执行时不会有任何输出,-d
指定了要发送的数据,-H
添加了一个自定义的 HTTP 头,而 -X
指定了请求方法为 POST。
curl的强大功能,我目前还得仰望,仅仅会将url对应的源码写入文件
😔
我目前对crul的唯一应用
system(f"curl -s {myUrlRoot}{Id} > {filename}") # Linux指令curl获取页面文本并存入磁盘文本文件。
这条python语句将网页f"{myUrlRoot}{Id}"
(将myUrlRoot
、Id
拼接而成的url)内容保存到名为变量filename
的文件中。见我的学习笔记“CSDN学习笔记总索引(2024)——我的创作纪念日(1024)”,地址:https://blog.csdn.net/m0_57158496/article/details/136768180,可以点击蓝色文字跳转翻阅。
3、Linux命令行中指令中的>
重定向
在 Linux 命令行中,>
字符是一个重定向操作符,用于将命令的输出重定向到文件中。具体来说,它将命令的输出写入到指定的文件中,如果文件已经存在,则覆盖原有内容。如果不指定文件名,则会创建一个以指定的文件名命名的新文件。
例如,如果你想将 ls
命令的输出(列出当前目录下的文件和文件夹)重定向到一个名为 filelist.txt
的文件中,你可以使用以下命令:
ls > filelist.txt
这个命令会创建(或覆盖)filelist.txt
文件,并将 ls
命令的输出写入到这个文件中。
还有另一个相关的重定向操作符 >>
,它用于将命令的输出追加到文件的末尾,而不是覆盖文件内容。例如:
ls >> filelist.txt
这个命令会将当前目录下的文件和文件夹列表追加到 filelist.txt
文件的末尾,而不是覆盖原有内容。
重定向操作符 >
和 >>
可以与几乎所有的命令行工具一起使用,使得在 Linux 中处理输出变得更加灵活和强大。
4、urllib的一般操作
urllib
是Python标准库中的一个模块,它提供了用于读取来自Web的URL(主要是HTTP和HTTPS)的函数和类。urllib
可以用来发送网络请求、处理异常、解析URLs等。以下是urllib
的一些基本功能和使用方法:
打开URL并读取内容
import urllib.request
# 打开一个网页并读取内容
with urllib.request.urlopen('http://www.example.com') as response:
html = response.read()
# 将字节转换为字符串
html = html.decode('utf-8')
# 打印内容
print(html)
发送GET请求
import urllib.parse
# 参数编码
params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
url = 'http://www.example.com/page?{}'.format(params)
# 发送GET请求
with urllib.request.urlopen(url) as response:
html = response.read()
发送POST请求
import urllib.parse
import urllib.request
# 要发送的数据
data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
data = data.encode('utf-8')
# 创建Request对象,设置请求头
req = urllib.request.Request('http://www.example.com/post', data=data)
req.add_header('User-Agent', 'Mozilla/5.0')
# 发送POST请求
with urllib.request.urlopen(req) as response:
html = response.read()
处理异常
from urllib.error import URLError, HTTPError
try:
with urllib.request.urlopen('http://www.example.com') as response:
html = response.read()
except HTTPError as e:
print('HTTP Error:', e.code)
except URLError as e:
print('URL Error:', e.reason)
解析URLs
from urllib.parse import urlparse
result = urlparse('http://www.example.com/index.html;user?id=5#comment')
print(result.scheme) # 'http'
print(result.netloc) # 'www.example.com'
print(result.path) # '/index.html'
print(result.params) # 'user'
print(result.query) # 'id=5'
print(result.fragment) # 'comment'
URL编码和解码
import urllib.parse
# 编码
encoded_params = urllib.parse.quote('参数1=值1&参数2=值2')
# 解码
decoded_params = urllib.parse.unquote(encoded_params)
print('Encoded:', encoded_params)
print('Decoded:', decoded_params)
urllib
模块提供了基本的网络请求功能,但对于更复杂的任务,如保持会话、处理cookies、发送JSON数据等,requests
库提供了更简洁和强大的API。不过,由于urllib
是Python标准库的一部分,它不需要安装,因此在无法安装第三方库的环境中,urllib
是一个非常有用的工具。
5、urllib高阶操作
urllib
模块确实提供了一些更高级的功能,虽然它们可能没有requests
库那么直观和易用。
以下是一些urllib
的高级操作:
使用OpenerDirector
处理多个请求
urllib
提供了一个OpenerDirector
类,它可以被用来处理多个请求,并且可以添加处理特殊类型的URL的处理器。
from urllib.request import OpenerDirector, HTTPHandler, HTTPSHandler
# 创建一个OpenerDirector实例
opener = OpenerDirector()
opener.add_handler(HTTPHandler())
opener.add_handler(HTTPSHandler())
# 使用opener发送请求
response = opener.open('http://www.example.com')
html = response.read()
使用build_opener
自定义请求
build_opener
函数可以用来创建一个OpenerDirector
实例,并且可以添加自定义的处理器。
from urllib.request import build_opener, HTTPHandler
from urllib.error import HTTPError
# 创建一个自定义的处理器
class MyHTTPHandler(HTTPHandler):
def http_open(self, req):
print("Sending request...")
return HTTPHandler.http_open(self, req)
# 使用build_opener添加自定义处理器
opener = build_opener(MyHTTPHandler())
# 发送请求
try:
response = opener.open('http://www.example.com')
html = response.read()
except HTTPError as e:
print('Error:', e.code)
使用ProxyHandler
设置代理
from urllib.request import ProxyHandler, build_opener
# 创建一个代理处理器
proxy_handler = ProxyHandler({
'http': 'http://127.0.0.1:8080',
'https': 'https://127.0.0.1:8080'
})
# 使用build_opener添加代理处理器
opener = build_opener(proxy_handler)
# 发送请求
response = opener.open('http://www.example.com')
html = response.read()
使用HTTPCookieProcessor
处理Cookies
from http.cookiejar import CookieJar
from urllib.request import HTTPCookieProcessor, build_opener
# 创建一个CookieJar对象
cookie_jar = CookieJar()
# 创建一个带有Cookie处理器的opener
opener = build_opener(HTTPCookieProcessor(cookie_jar))
# 发送请求
response = opener.open('http://www.example.com')
html = response.read()
# 查看cookies
for cookie in cookie_jar:
print(cookie)
使用Request
对象自定义请求
from urllib.request import Request
# 创建一个Request对象,设置自定义的请求头
req = Request('http://www.example.com')
req.add_header('User-Agent', 'Mozilla/5.0')
# 发送请求
with urllib.request.urlopen(req) as response:
html = response.read()
这些是urllib
提供的一些高级功能,它们可以帮助你处理更复杂的网络请求场景。不过,如果您需要频繁进行网络请求或者处理更复杂的逻辑,那么使用requests
库可能会更加方便和高效。
6、curl vs urllib
是不是可以说“urllib是python中的curl”?
- 可以认为
urllib
在Python中的作用与curl
在命令行中的作用类似,但它们之间也有一些区别。
urllib
是Python的标准库之一,用于读取来自Web的URL(统一资源定位符)的内容。它支持许多HTTP功能,如请求发送、响应读取、异常处理等。使用urllib
可以很容易地在Python程序中实现网络数据的获取和操作。
而curl
是一个在命令行或脚本中向/从服务器传输数据的工具,支持许多协议,如HTTP、HTTPS、FTP等。curl
通常用于测试、调试和日常使用。
虽然urllib
和curl
在功能上有相似之处,但它们的使用场景和操作方式有所不同。urllib
更适用于Python程序中,而curl
更适用于命令行环境。
7、os.system LINUX指令容器
如果用os.system在python中模拟LINUX命令行操作curl,比之urllib,何如?
使用
os.system在Python中调用
curl命令行工具与使用
urllib库进行HTTP请求有以下几个主要区别
:
- 环境依赖:
os.system
需要你的系统上安装有curl
命令行工具,而urllib
是Python的标准库,无需额外安装。
- 功能和使用场景:
curl
是一个功能强大的工具,支持多种协议和数据传输选项,通常用于复杂的网络任务,如文件上传/下载、身份验证、代理支持等。urllib
通常用于简单的HTTP请求,但对于Python程序员来说,它更易于集成到Python代码中,并且可以通过各种Pythonic的方式进行错误处理和数据操作。
- 性能:
os.system
在执行curl
命令时需要启动一个新的进程,这比直接在Python中使用urllib
进行网络请求要慢,因为urllib
是在Python进程中直接进行网络通信。
- 安全性:
- 使用
os.system
执行系统命令存在安全风险,因为它可能会受到注入攻击,如果命令中包含不受信任的用户输入,这可能导致安全漏洞。 urllib
是Python的一部分,其使用方式和参数传递更加安全,不容易受到注入攻击。
- 使用
- 代码维护和可读性:
- 使用
os.system
调用curl
会使得代码依赖于外部工具,这可能会在不同的环境中导致问题,并且使得代码更难以维护。 urllib
的使用更加符合Python的编程习惯,使得代码更加一致和可读。
- 使用
总的来说,如果你只是需要进行一些简单的HTTP请求,urllib
通常是更好的选择,因为它更简单、更安全,并且与Python的集成更紧密。然而,如果你需要利用curl
的特定功能,或者在一个已经使用了curl
命令的环境中,使用os.system
来调用curl
也是可行的,但需要注意相关的安全性和性能问题。
8、总结
c u r l curl curl和 u r l l i b urllib urllib都是好用的参与 W e b Web Web的实用工具,至于选择哪个形式,要根据适用场景和个人喜好,因时因地权衡考量。
上一篇: python脚本“文档”撰写——“诱骗”ai撰写“火火的动态”python“自动”脚本文档(“火火的动态”python“自动”脚本文档,又从ai学习搭子那儿“套”来,可谓良心质量👍👍)
下一篇:
我的HOT博:
本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有
7
7
7篇。
-
001
标题:让QQ群昵称色变的神奇代码
(浏览阅读 5.9w )
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:25 收藏:86 评论:17
摘要:让QQ昵称色变的神奇代码。
首发:2022-01-18 19:15:08
最后编辑:2022-01-20 07:56:47 -
002
标题:Python列表(list)反序(降序)的7种实现方式
(浏览阅读 1.1w )
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞:8 收藏:35 评论:8
摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
首发:2022-12-11 23:54:15
最后编辑:2023-03-20 18:13:55 -
003
标题:pandas 数据类型之 DataFrame
(浏览阅读 9.7k )
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:7 收藏:36
摘要:pandas 数据类型之 DataFrame_panda dataframe。
首发:2022-05-01 13:20:17
最后编辑:2022-05-08 08:46:13 -
004
标题:个人信息提取(字符串)
(浏览阅读 8.2k )
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:2 收藏:15
摘要:个人信息提取(字符串)_个人信息提取python。
首发:2022-04-18 11:07:12
最后编辑:2022-04-20 13:17:54 -
005
标题:Python字符串居中显示
(浏览阅读 7.6k )
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
评论:1 -
006
标题:罗马数字转换器|罗马数字生成器
(浏览阅读 7.5k )
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
摘要:罗马数字转换器|生成器。
首发:2022-01-19 23:26:42
最后编辑:2022-01-21 18:37:46 -
007
标题:回车符、换行符和回车换行符
(浏览阅读 6.0k )
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:2 收藏:3
摘要:回车符、换行符和回车换行符_命令行回车符。
首发:2022-02-24 13:10:02
最后编辑:2022-02-25 20:07:40
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)