Curl 转 Python 教程 – wiki基地


从命令行到代码:Curl 命令如何优雅地转化为 Python Requests

对于开发者而言,HTTP 请求是日常工作中不可或缺的一部分。无论是测试 API 接口、抓取网页数据,还是与其他服务进行交互,我们都需要发送和接收 HTTP 请求。在命令行中,curl 是一个极其强大且常用的工具,它可以构建几乎任何类型的 HTTP 请求。然而,当我们需要将这些请求集成到自动化脚本、Web 应用或数据处理流程中时,将 curl 命令转化为代码是必要的。

Python 的 requests 库是进行 HTTP 请求的黄金标准。它以其简洁的 API 和强大的功能,成为了 Python 生态中最受欢迎的网络库之一。本篇文章将深入探讨如何将常用的 curl 命令及其各种选项,转化为等价的 Python requests 代码。通过理解这种转化关系,你可以轻松地将命令行中验证过的请求逻辑,无缝迁移到你的 Python 项目中。

我们将从 curl 的基础用法开始,逐步覆盖各种复杂的场景,包括请求方法、头部信息、请求体、参数、认证、Cookie、代理、SSL 校验等,并提供详细的 Python requests 代码示例。

为什么需要将 Curl 转化为 Python?

你可能会问,为什么不直接在 Python 中从头构建请求?原因有很多:

  1. API 文档通常提供 Curl 示例: 很多 API 文档为了方便开发者快速测试,会优先提供 curl 命令示例。
  2. 快速验证: 在命令行中使用 curl 可以快速发送请求并查看响应,用于验证接口或调试问题非常高效。
  3. 理解请求细节: curl -v 命令可以显示非常详细的请求和响应过程,有助于理解 HTTP 协议细节。
  4. 自动化与集成: curl 适合一次性或简单的任务,但对于需要循环、条件判断、数据处理、与其他库集成的复杂任务,Python 脚本则更加灵活和强大。

因此,能够将已有的、工作正常的 curl 命令转化为 Python 代码,是提高开发效率的重要技能。

Python Requests 库简介

在开始转化之前,我们先简单介绍一下 requests 库。requests 库是 Python 的第三方库,需要单独安装。

安装 requests

bash
pip install requests

requests 库的核心是几个顶级函数,对应不同的 HTTP 方法(requests.get(), requests.post(), requests.put(), requests.delete() 等),以及一个通用的 requests.request() 函数。这些函数接受多种参数来定制请求,这些参数与 curl 的命令行选项有着非常直观的对应关系。

一个最简单的 requests GET 请求是这样的:

“`python
import requests

url = “https://www.example.com”
response = requests.get(url)

print(f”Status Code: {response.status_code}”)
print(f”Response Body:\n{response.text}”)
“`

Curl 与 Requests 的核心对应关系

理解 curlrequests 的转化,关键在于掌握它们如何表示 HTTP 请求的不同组成部分。下表是一个基本的对应概览:

Curl 命令行选项 对应 HTTP 请求组成部分 Python Requests 中对应参数或方法 说明
<URL> URL 函数的第一个参数(如 get(url, ...) 请求的目标地址
-X <METHOD> HTTP 方法 不同的函数 (get, post, etc.) 或 method 参数 请求类型(GET, POST, PUT, DELETE 等)
-H "<Header: Value>" 请求头 (Headers) headers 参数 (字典) 附加的请求信息,如 User-Agent, Cookie
-d '<data>' / --data 请求体 (Body) – 表单 data 参数 (字典或字符串) POST/PUT 等请求发送的数据,通常为表单
--data-raw '<data>' 请求体 (Body) – 原始 data 参数 (字符串) 发送未编码的原始数据,如 JSON, XML
--data-urlencode 请求体 (Body) – URL编码 data 参数 (字典,requests会自动编码) 发送URL编码的表单数据
-G + -d 查询参数 (Query Params) params 参数 (字典) GET 请求中附加在URL后的参数
-F "<name>=<value>" 请求体 (Body) – multipart/form-data files 参数 (字典) 或 data 参数 用于文件上传或发送混合类型数据
-u "<user>:<pass>" 基本认证 (Basic Auth) auth 参数 (元组或认证对象) HTTP Basic Authentication
-b "<cookie-string>" / --cookie Cookies cookies 参数 (字典或CookieJar) 发送 Cookie 信息
-k / --insecure SSL 校验忽略 verify=False 参数 忽略不安全的SSL证书,不推荐生产使用
-L / --location 跟随重定向 allow_redirects 参数 (默认为 True) 自动处理 HTTP 3xx 重定向
-x "<proxy>" 代理 proxies 参数 (字典) 通过代理服务器发送请求
-O / --remote-name 下载文件 读取响应内容并写入文件 (需要手动实现) 保存响应体到本地文件
-A / --user-agent User-Agent 头 headers 参数 (字典,设置 ‘User-Agent’ 键) 设置用户代理字符串
-e / --referer Referer 头 headers 参数 (字典,设置 ‘Referer’ 键) 设置引用页地址
--connect-timeout 连接超时 timeout 参数 (元组或数字) 设置连接和读取超时

接下来,我们将针对这些常用选项,提供具体的转化示例。

Curl 到 Python Requests 的详细转化示例

1. 基本 GET 请求

  • Curl:

    bash
    curl https://api.example.com/data

  • Python Requests:

    “`python
    import requests

    url = “https://api.example.com/data”
    try:
    response = requests.get(url)
    response.raise_for_status() # 检查响应状态码,如果不是2xx则抛出异常
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    # 如果响应是 JSON
    # print(“Response JSON:”, response.json())
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: requests.get() 函数直接接受 URL 作为参数。response.text 获取响应体,response.status_code 获取状态码。添加 try...exceptresponse.raise_for_status() 是良好的实践,用于处理可能的网络错误和非成功的 HTTP 状态码。

2. 指定 HTTP 方法 (-X)

curl -X 选项用于指定除 GET 之外的 HTTP 方法,如 POST, PUT, DELETE 等。requests 库为这些方法提供了相应的函数。

  • Curl (POST):

    bash
    curl -X POST https://api.example.com/resource

  • Python Requests (POST):

    “`python
    import requests

    url = “https://api.example.com/resource”
    try:
    response = requests.post(url)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明:requests.get() 替换为 requests.post()。对于 PUT (-X PUT), DELETE (-X DELETE) 等方法,也只需调用对应的 requests.put(), requests.delete() 函数。

    如果你需要动态地使用不同的方法,可以使用 requests.request() 通用函数:

    “`python
    import requests

    method = “POST” # 可以是 “GET”, “PUT”, “DELETE” 等
    url = “https://api.example.com/resource”
    try:
    response = requests.request(method, url)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

3. 添加请求头部 (-H)

curl -H 选项用于添加自定义的请求头部。在 requests 中,这通过 headers 参数实现,它接受一个字典,字典的键是头部名称,值是头部内容。

  • Curl:

    bash
    curl -H "User-Agent: My Python Script" -H "Content-Type: application/json" https://api.example.com/data

  • Python Requests:

    “`python
    import requests

    url = “https://api.example.com/data”
    headers = {
    “User-Agent”: “My Python Script”,
    “Content-Type”: “application/json”
    }
    try:
    # 注意:如果请求体是JSON,更常用的方式是使用 json= 参数,requests会自动设置 Content-Type
    # 但这里为了演示 headers 参数,我们手动设置 Content-Type
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: headers 参数是一个字典。你可以添加任意数量的头部信息到这个字典中。

4. 发送请求体 (-d, --data-raw, --data-urlencode)

curl -d--data 用于在 POST 或 PUT 等请求中发送数据。它可以用来发送表单数据 (application/x-www-form-urlencoded) 或原始数据。requests 提供了 datajson 参数来处理请求体。

  • Curl (发送 URL 编码表单数据):

    “`bash
    curl -X POST -d “param1=value1&param2=value2” https://api.example.com/submit

    等价于 curl -X POST –data “param1=value1&param2=value2” …

    等价于 curl -X POST –data-urlencode “param1=value1” –data-urlencode “param2=value2” …

    “`

  • Python Requests (发送表单数据):

    你可以直接传递一个字符串,或者一个字典(requests 会自动编码)。

    “`python
    import requests

    url = “https://api.example.com/submit”

    使用字典,requests 会自动进行 URL 编码,并设置 Content-Type 为 application/x-www-form-urlencoded

    data_payload = {
    “param1”: “value1”,
    “param2”: “value2”
    }

    或者使用字符串 (如果你已经有了编码好的字符串)

    data_payload = “param1=value1&param2=value2”

    try:
    response = requests.post(url, data=data_payload)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: 使用字典给 data 参数是更推荐的方式,因为 requests 会处理编码和 Content-Type 头。

  • Curl (发送原始 JSON 数据):

    通常需要结合 -H "Content-Type: application/json"--data-raw

    bash
    curl -X POST -H "Content-Type: application/json" --data-raw '{"key1": "value1", "key2": "value2"}' https://api.example.com/submit_json

  • Python Requests (发送 JSON 数据):

    requests 提供了一个方便的 json 参数。

    “`python
    import requests

    url = “https://api.example.com/submit_json”
    json_payload = {
    “key1”: “value1”,
    “key2”: “value2”
    }

    try:
    # 使用 json 参数,requests 会自动将字典序列化为 JSON 字符串,
    # 并自动设置 Content-Type 为 application/json
    response = requests.post(url, json=json_payload)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: 对于 JSON 数据,强烈推荐使用 json 参数,它比手动设置 Content-Type 和使用 data 参数更简洁且不易出错。

5. 发送查询参数 (-G + -d)

curl -G 选项结合 -d 选项可以将 -d 后面的数据作为 URL 查询参数附加到 GET 请求中。在 requests 中,这通过 params 参数实现。

  • Curl:

    “`bash
    curl -G -d “param1=value1” -d “param2=value2” https://api.example.com/search

    这会构建请求 https://api.example.com/search?param1=value1&param2=value2

    “`

  • Python Requests:

    “`python
    import requests

    url = “https://api.example.com/search”
    params_payload = {
    “param1”: “value1”,
    “param2”: “value2”
    }

    try:
    # 使用 params 参数,requests 会自动将字典编码并附加到 URL 后面
    response = requests.get(url, params=params_payload)
    response.raise_for_status()
    print(“Request URL:”, response.url) # 查看构建后的完整URL
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: params 参数接受一个字典,requests 会负责 URL 编码和拼接。这比手动构建带有查询参数的 URL 更加方便和安全(因为它会正确处理特殊字符)。

6. 文件上传 (-F)

curl -F 选项用于发送 multipart/form-data 请求,常用于文件上传。在 requests 中,这通过 files 参数实现。

  • Curl:

    bash
    curl -X POST -F "username=test" -F "profile=@/path/to/my/profile.jpg" https://api.example.com/upload

  • Python Requests:

    “`python
    import requests

    url = “https://api.example.com/upload”

    文件需要以二进制模式打开

    try:
    with open(‘/path/to/my/profile.jpg’, ‘rb’) as f:
    files = {
    ‘profile’: f # requests 会自动获取文件名和 Content-Type
    # 你也可以指定文件名,内容和 Content-Type:
    # ‘profile’: (‘profile.jpg’, f, ‘image/jpeg’)
    }
    data_payload = {
    ‘username’: ‘test’
    }
    response = requests.post(url, data=data_payload, files=files)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except FileNotFoundError:
    print(“Error: File not found.”)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: files 参数是一个字典,键是表单字段的名称,值可以是打开的文件对象,或者一个元组 (filename, file_content, content_type, headers)。对于简单的文件上传,直接传递文件对象即可。非文件字段可以通过 data 参数传递。

7. 基本认证 (-u)

curl -u "<user>:<pass>" 用于进行 HTTP 基本认证。在 requests 中,通过 auth 参数实现。

  • Curl:

    bash
    curl -u "myuser:mypassword" https://api.example.com/protected

  • Python Requests:

    “`python
    import requests
    from requests.auth import HTTPBasicAuth # 虽然通常可以直接用元组,但导入更清晰

    url = “https://api.example.com/protected”

    auth 参数接受一个 (username, password) 元组

    auth_tuple = (“myuser”, “mypassword”)

    或者使用 HTTPBasicAuth 对象 (功能更强大,虽然这里用元组足够)

    auth_object = HTTPBasicAuth(“myuser”, “mypassword”)

    try:
    response = requests.get(url, auth=auth_tuple) # 或 auth=auth_object
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: auth 参数接受一个包含用户名和密码的元组。requests 会负责构建并发送 Authorization: Basic ... 头部。requests.auth 模块还提供了其他认证类型,如摘要认证 (HTTPDigestAuth)。

8. 处理 Cookie (-b, -c)

curl -b 用于发送 Cookie,-c 用于将会话的 Cookie 保存到文件。在 requests 中,cookies 参数用于发送 Cookie,而 requests.Session 对象可以自动管理会话期间的 Cookie。

  • Curl (发送 Cookie):

    “`bash
    curl -b “cookie1=value1; cookie2=value2” https://api.example.com/with_cookie

    或者从文件读取 cookie: curl -b cookies.txt https://api.example.com/with_cookie

    “`

  • Python Requests (发送 Cookie):

    cookies 参数接受一个字典。

    “`python
    import requests

    url = “https://api.example.com/with_cookie”
    cookies_payload = {
    “cookie1”: “value1”,
    “cookie2”: “value2”
    }

    try:
    response = requests.get(url, cookies=cookies_payload)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    # 也可以获取响应中的 Cookie
    print(“Response Cookies:”, response.cookies.get_dict())
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

  • Curl (保存 Cookie 并用于后续请求):

    bash
    curl -c cookies.txt https://api.example.com/login # 登录并保存 cookie
    curl -b cookies.txt https://api.example.com/profile # 使用保存的 cookie 访问

  • Python Requests (使用 Session 管理 Cookie):

    requests.Session 对象会自动维护会话期间的 Cookie。

    “`python
    import requests

    login_url = “https://api.example.com/login”
    profile_url = “https://api.example.com/profile”
    login_data = {“username”: “user”, “password”: “password”} # 假设登录需要 POST 数据

    创建一个 Session 对象

    with requests.Session() as session:
    try:
    # 使用 session 发送登录请求,requests 会自动保存响应中的 Set-Cookie 头
    login_response = session.post(login_url, data=login_data)
    login_response.raise_for_status()
    print(“Login Status Code:”, login_response.status_code)
    print(“Cookies after login:”, session.cookies.get_dict()) # 查看 session 中保存的 cookie

        # 使用同一个 session 发送访问 profile 的请求,session 会自动带上之前保存的 cookie
        profile_response = session.get(profile_url)
        profile_response.raise_for_status()
        print("Profile Status Code:", profile_response.status_code)
        print("Profile Body:", profile_response.text)
    
    except requests.exceptions.RequestException as e:
        print("Request failed:", e)
    

    Session 结束后,cookie 不会被保留

    “`

    说明: 对于需要保持会话状态(如登录后的操作)的场景,强烈建议使用 requests.Session。它不仅管理 Cookie,还能提高效率(连接池复用)。

9. 忽略 SSL 证书校验 (-k)

curl -k--insecure 用于忽略 SSL/TLS 证书的校验。在 requests 中,通过 verify=False 参数实现。

  • Curl:

    bash
    curl -k https://untrusted-cert.example.com

  • Python Requests:

    “`python
    import requests
    import urllib3 # 导入 urllib3 来抑制 InsecureRequestWarning

    禁用 InsecureRequestWarning 警告 (可选,但推荐)

    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    url = “https://untrusted-cert.example.com”

    try:
    # 设置 verify=False 忽略证书校验
    response = requests.get(url, verify=False)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    重要警告: 忽略 SSL 证书校验会使你的连接容易受到中间人攻击。在生产环境或处理敏感数据时,绝不应该使用 verify=False 只在测试或访问内部服务(你知道其证书是自签名的且可信)时谨慎使用。

10. 跟随重定向 (-L)

curl -L--location 会指示 curl 跟随任何 Location 头指示的重定向。requests 默认情况下是跟随重定向的 (allow_redirects=True)。

  • Curl:

    bash
    curl -L https://shorturl.example.com/xyz

  • Python Requests:

    “`python
    import requests

    url = “https://shorturl.example.com/xyz”

    try:
    # requests 默认 allow_redirects=True
    response = requests.get(url)
    # 如果你想禁止重定向,可以设置 allow_redirects=False
    # response = requests.get(url, allow_redirects=False)

    response.raise_for_status()
    print("Status Code:", response.status_code)
    print("Final URL after redirects:", response.url) # 查看最终重定向到的 URL
    print("History of redirects:", response.history) # 查看重定向历史
    print("Response Body:", response.text)
    

    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: requests 默认行为与 curl -L 一致。response.url 会显示最终请求的 URL,response.history 是一个列表,包含了所有重定向的响应对象。

11. 使用代理 (-x)

curl -x <proxy> 用于通过指定的代理服务器发送请求。在 requests 中,这通过 proxies 参数实现。

  • Curl:

    “`bash
    curl -x “http://myproxy.com:8080” https://api.example.com/data

    如果是 HTTPS 代理

    curl -x “https://myproxy.com:8080” https://api.example.com/data

    如果代理需要认证

    curl -x “http://user:[email protected]:8080” https://api.example.com/data

    “`

  • Python Requests:

    proxies 参数接受一个字典,键是协议 (http, https),值是代理地址。

    “`python
    import requests

    url = “https://api.example.com/data”

    代理字典

    proxies = {
    “http”: “http://myproxy.com:8080”,
    “https”: “http://myproxy.com:8080”, # HTTPS 请求也可以走 HTTP 代理
    # 如果是 HTTPS 代理
    # “https”: “https://myproxy.com:8080”,
    # 如果代理需要认证
    # “http”: “http://user:[email protected]:8080”,
    # “https”: “http://user:[email protected]:8080”,
    }

    try:
    response = requests.get(url, proxies=proxies)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: 你可以为 httphttps 分别指定不同的代理,或者指定相同的代理。带认证的代理可以将用户信息直接写在代理地址中。

12. 下载文件并保存 (-O)

curl -O--remote-name 会下载 URL 指定的文件,并以文件名保存在当前目录。在 requests 中,你需要手动读取响应内容并写入文件。对于大文件,推荐使用流式下载。

  • Curl:

    bash
    curl -O https://example.com/largefile.zip

  • Python Requests (流式下载):

    “`python
    import requests
    import os

    url = “https://example.com/largefile.zip”

    从 URL 提取文件名 (简单示例,更健壮的方式可能需要解析 Content-Disposition 头)

    local_filename = url.split(‘/’)[-1]

    try:
    # stream=True 启用流式模式,避免将整个响应体载入内存
    with requests.get(url, stream=True) as r:
    r.raise_for_status() # 检查状态码
    # 获取文件总大小 (可选)
    total_size = int(r.headers.get(‘content-length’, 0))
    downloaded_size = 0

        with open(local_filename, 'wb') as f:
            # 以块为单位写入文件
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
                downloaded_size += len(chunk)
                # 打印下载进度 (可选)
                if total_size > 0:
                     progress = (downloaded_size / total_size) * 100
                     print(f"Downloaded {downloaded_size}/{total_size} bytes ({progress:.2f}%)", end='\r')
    
    print(f"\nDownload complete: {local_filename}") # 完成后打印新行
    

    except requests.exceptions.RequestException as e:
    print(f”\nDownload failed: {e}”)
    except IOError as e:
    print(f”\nError writing file: {e}”)
    “`

    说明: 使用 stream=Trueiter_content() 是下载大文件的标准做法,可以显著减少内存占用。你需要自己处理文件名获取和文件写入逻辑。

13. 设置超时 (--connect-timeout, --max-time)

curl --connect-timeout 设置连接建立的超时时间,--max-time 设置整个请求的最大允许时间。在 requests 中,通过 timeout 参数实现。

  • Curl:

    bash
    curl --connect-timeout 5 --max-time 10 https://api.example.com/slow-endpoint

  • Python Requests:

    timeout 参数可以是一个数字(表示连接和读取的总超时),或一个元组 (connect_timeout, read_timeout)

    “`python
    import requests

    url = “https://api.example.com/slow-endpoint”

    timeout 参数:可以是一个数字 (总超时) 或 (连接超时, 读取超时) 元组

    这里设置为连接超时 5 秒,读取超时 10 秒

    request_timeout = (5, 10)

    try:
    response = requests.get(url, timeout=request_timeout)
    response.raise_for_status()
    print(“Status Code:”, response.status_code)
    print(“Response Body:”, response.text)
    except requests.exceptions.Timeout:
    print(“Request timed out”)
    except requests.exceptions.RequestException as e:
    print(“Request failed:”, e)
    “`

    说明: 设置超时可以防止程序因为等待慢响应或无响应的服务器而长时间阻塞。捕获 requests.exceptions.Timeout 异常来专门处理超时情况。

使用 CurlConverter 等在线工具

虽然手动转化有助于理解 curlrequests 的对应关系,但对于非常复杂的 curl 命令,手动转化可能会耗时且容易出错。此时,你可以利用一些在线工具来辅助转化,例如 curlconverter.com

你只需将 curl 命令粘贴到这些工具的输入框中,它就能尝试生成多种语言(包括 Python Requests)的代码。

重要提示: 自动化工具并非万能。它们可能无法完全理解 curl 的所有复杂选项,特别是一些不常用或组合使用的情况。生成的代码可能需要你手动检查和调整,尤其是在处理 Cookie jar、复杂的身份验证、特定的数据编码或错误处理时。因此,理解背后的转化原理仍然至关重要。

总结

curl 和 Python requests 都是进行 HTTP 请求的强大工具。curl 以其命令行上的灵活性和丰富选项著称,适合快速测试和一次性任务;而 requests 则提供了简洁优雅的 API,是构建自动化、可编程 HTTP 客户端的首选。

通过本文的详细讲解和示例,你应该已经掌握了将 curl 命令的常用选项转化为 requests 库中对应参数的方法。核心思想是将 curl 的各种命令行标志视为配置 HTTP 请求不同部分的指令,然后在 requests 中找到对应的函数参数(如 headers, data, params, auth, proxies 等)来实现相同的功能。

记住以下关键对应:

  • URL: 函数的第一个参数。
  • 方法 (-X): 使用不同的函数 (get, post, etc.) 或 method 参数。
  • 头部 (-H): headers 字典参数。
  • 请求体 (-d, --data-raw, --data-urlencode): datajson 参数。
  • 查询参数 (-G + -d): params 字典参数。
  • 文件上传 (-F): files 字典参数。
  • 认证 (-u): auth 元组或对象参数。
  • Cookie (-b, -c): cookies 字典参数 或使用 requests.Session
  • 忽略 SSL (-k): verify=False 参数 (谨慎使用)。
  • 重定向 (-L): allow_redirects 参数 (默认为 True)。
  • 代理 (-x): proxies 字典参数。
  • 超时 (--connect-timeout, --max-time): timeout 参数。

掌握了这些转化技巧,你就可以更加高效地将命令行中调试成功的 curl 命令,快速集成到你的 Python 项目中,构建强大而灵活的网络应用程序。在实践中多加练习,你会发现这个转化过程变得越来越直观和自然。

希望这篇详细的教程能帮助你顺利地从 Curl 的世界过渡到 Python Requests 的怀抱!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部