Bootstrap

LINUX命令行curl指令与python内置urllib模块

urllib是python御用的易用的轻便模块,curl是Linux功能强大的命令行工具,都是参与Web的利器。


(笔记模板由python脚本于2024年07月10日 18:41:12创建,本篇笔记适合喜欢Python和Linux的coder翻阅)


【学习的细节是欢悦的历程】


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……


curl是Linux功能强大的命令行工具
curl指令&urllib模块
(urllib是python御用的易用的轻便模块)


本文质量分:

96 96 96

本文地址: 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&param2=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 参数类型:
  1. 基本选项:
    • -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 请求方法。
  2. 连接选项:
    • -c--cookie: 读取 cookies。
    • -b--cookie-jar: 将 cookies 保存到文件。
    • -e--referer: 设置引用页。
    • -L--location: 跟随重定向。
    • --connect-timeout: 设置连接超时时间。
    • --max-time: 设置最大允许操作时间。
  3. 数据传输选项:
    • -T--upload-file: 上传文件。
    • -C--continue-at: 断点续传。
  4. SSL/安全选项:
    • --cert: SSL 证书。
    • --key: SSL 密钥。
    • --cacert: CA 证书。
    • -k--insecure: 允许不安全的 SSL 连接。
  5. 其他选项:
    • -v--verbose: 显示详细操作信息。
    • -q--disable: 禁用进度/速率输出。
    • --silent: 静默模式。
    • --version: 显示版本信息。
    • --help: 显示帮助信息。
      这些参数可以根据需要进行组合,以实现特定的网络请求。例如,如果你想以 POST 方法发送数据到一个 URL,并设置自定义的 HTTP 头,你可以使用如下命令:
curl -d "param1=value1&param2=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&param2=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}"(将myUrlRootId拼接而成的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通常用于测试、调试和日常使用。

    虽然urllibcurl在功能上有相似之处,但它们的使用场景和操作方式有所不同。urllib更适用于Python程序中,而curl更适用于命令行环境。



回页目录


7、os.system LINUX指令容器


  • 如果用os.system在python中模拟LINUX命令行操作curl,比之urllib,何如?

  • 使用os.system在Python中调用curl命令行工具与使用urllib库进行HTTP请求有以下几个主要区别
  1. 环境依赖
    • os.system需要你的系统上安装有curl命令行工具,而urllib是Python的标准库,无需额外安装。
  2. 功能和使用场景
    • curl是一个功能强大的工具,支持多种协议和数据传输选项,通常用于复杂的网络任务,如文件上传/下载、身份验证、代理支持等。
    • urllib通常用于简单的HTTP请求,但对于Python程序员来说,它更易于集成到Python代码中,并且可以通过各种Pythonic的方式进行错误处理和数据操作。
  3. 性能
    • os.system在执行curl命令时需要启动一个新的进程,这比直接在Python中使用urllib进行网络请求要慢,因为urllib是在Python进程中直接进行网络通信。
  4. 安全性
    • 使用os.system执行系统命令存在安全风险,因为它可能会受到注入攻击,如果命令中包含不受信任的用户输入,这可能导致安全漏洞。
    • urllib是Python的一部分,其使用方式和参数传递更加安全,不容易受到注入攻击。
  5. 代码维护和可读性
    • 使用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篇。


推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

来源:老齐教室


Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:


;