Curl工具小记

curl 是一个非常强大且灵活的命令行工具,用于获取或发送数据,无需用户图形界面交互。它支持多种协议,并且可以在脚本中使用,以实现自动化任务。

基本介绍

  • curl 是 “Client URL” 的缩写,它是一个利用 URL 语法在命令行下工作的文件传输工具。
  • 版本: curl 最初发布于 1997 年。
  • 支持的协议: 包括 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, LDAPS, RTMP, RTSP, POP3, POP3S, IMAP, IMAPS, SMTP, SMTPS 等。
  • 功能: 下载文件、上传文件、执行 HTTP 请求、测试网络服务可用性等。
  • : curl 包含了一个名为 libcurl 的库,用于程序开发。

安装

如果系统中没有安装 curl,可以通过包管理器安装:

sudo apt-get install curl  # Debian/Ubuntu
sudo yum install curl      # CentOS/RHEL
sudo pacman -S curl        # Arch Linux

命令格式

curl [选项] [目标URL]

常用选项

  • -X, --request <command>: 指定请求方法(GET, POST, PUT, DELETE 等)。
  • -d, --data <data>: 发送数据到服务器。
  • -u, --user <user:password>: 指定用户名和密码。
  • -o, --output <file>: 将输出写入文件。
  • -O, --remote-name: 直接保存远程文件名。
  • -L, --location: 跟随重定向。
  • -I, --head: 获取头部信息。
  • -v, --verbose: 显示详细信息。
  • -V, --version: 显示版本信息。
  • -s, --silent: 静默模式,不显示进度条。
  • -H, --header <header>: 自定义头部信息。
  • -A, --user-agent <agent>: 设置 User-Agent 字段。
  • -i, --include: 包含头部信息在输出中。
  • -J, --remote-header-name: 使用远程文件的名称。
  • -T, --upload-file <file>: 上传文件。
  • -x, --proxy <host:port>: 使用 HTTP 代理。
  • -b, --cookie <name=value>: 发送 Cookie。
  • -c, --cookie-jar <filename>: 保存 Cookie 到文件。
  • -e, --referer <url>: 设置 Referer 字段。
  • -m, --max-time <seconds>: 设置最大时间限制。
  • -k, --insecure: 允许连接到不受信任的 SSL 站点。
  • -f, --fail: 服务器返回错误时退出。

示例

  • 下载文件:

    curl http://example.com/file.txt -o file.txt
    
  • 发送 POST 请求:

    curl -X POST -d "param1=value1&param2=value2" http://example.com/api
    
  • 模拟浏览器:

    curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://example.com
    
  • 使用代理:

    curl -x proxy.example.com:8080 http://example.com
    
  • 上传文件:

    curl -T localfile ftp://example.com/remote/path/
    
  • 获取头部信息:

    curl -I http://example.com
    

基本 GET 请求

最简单的 GET 请求就是直接指定 URL,curl 会自动使用 GET 方法获取资源:

curl http://example.com

这将打印出从 http://example.com 获取的 HTML 内容。

包含查询参数

如果你需要向 URL 添加查询参数,可以直接在 URL 后面加上 ? 和参数字符串:

curl 'http://example.com/?q=query+string&param=value'

或者你可以使用 -G--get 选项来明确地指定 GET 请求,并使用 -d--data 来添加参数:

curl -G 'http://example.com/' -d 'q=query+string' -d 'param=value'

设置请求头

你还可以设置自定义的 HTTP 头部信息,例如设置 User-AgentAccept

curl -H 'User-Agent: MyCustomAgent/1.0' -H 'Accept: application/json' http://example.com

跟随重定向

如果你要访问的 URL 可能会被重定向,可以使用 -L--location 选项来跟随重定向:

curl -L http://example.com

保存响应到文件

如果你想将响应的内容保存到文件而不是显示在终端上,可以使用 -o--output 选项:

curl http://example.com -o output.html

输出 HTTP 头部信息

如果你想查看服务器返回的 HTTP 头部信息,可以使用 -I--head 选项:

curl -I http://example.com

或者使用 -i--include 选项来同时输出头部信息和主体内容:

curl -i http://example.com

限制请求时间

如果你希望设置请求的最大时间限制,可以使用 -m--max-time 选项:

curl -m 10 http://example.com

这里的时间单位是秒。

使用代理

如果你需要通过代理服务器访问网站,可以使用 -x--proxy 选项:

curl -x proxy.example.com:8080 http://example.com

发送 POST 请求是 curl 的一个常用功能。下面是一些示例来说明如何使用 curl 发送 POST 请求。

基本 POST 请求

发送一个基本的 POST 请求,包括一个简单的参数:

curl -X POST -d "param1=value1&param2=value2" http://example.com/api

这里的 -X POST 指定了请求方法为 POST,而 -d 参数用来传递 POST 数据。

使用 JSON 数据

如果你需要发送 JSON 格式的数据,可以使用 -H 添加 Content-Type 为 application/json,并使用 -d-F 来发送 JSON 数据:

curl -X POST \
     -H "Content-Type: application/json" \
     -d '{"key1":"value1", "key2":"value2"}' \
     http://example.com/api

注意,如果你发送的是 JSON 格式的字符串,最好使用单引号 (') 来避免 shell 对双引号 (") 中的特殊字符进行转义。

使用文件中的 JSON 数据

如果 JSON 数据存储在一个文件中,可以读取该文件内容并发送:

curl -X POST \
     -H "Content-Type: application/json" \
     -d @path/to/data.json \
     http://example.com/api

这里 @path/to/data.json 表示从文件中读取 JSON 数据。

使用表单数据

对于表单数据,你可以使用 -F--form 选项来发送数据,这样可以更好地处理文件上传和其他表单字段:

curl -X POST \
     -F "username=john" \
     -F "password=secret" \
     -F "file=@/path/to/local/file" \
     http://example.com/upload

这里 -F 用于发送表单字段,@/path/to/local/file 用于指定要上传的文件。

设置 HTTP 头部信息

你也可以设置其他 HTTP 头部信息,比如 User-Agent 或者 Authorization

curl -X POST \
     -H "User-Agent: MyCustomAgent/1.0" \
     -H "Authorization: Bearer ACCESS_TOKEN" \
     -d "param1=value1&param2=value2" \
     http://example.com/api

使用代理

如果你需要通过代理服务器发送 POST 请求,可以使用 -x--proxy 选项:

curl -X POST \
     -x proxy.example.com:8080 \
     -d "param1=value1&param2=value2" \
     http://example.com/api

附加认证

如果 API 需要基本认证,你可以使用 -u--user 选项来提供用户名和密码:

curl -X POST \
     -u "username:password" \
     -d "param1=value1&param2=value2" \
     http://example.com/api

限制请求时间

如果你想限制整个请求的最大时间,可以使用 -m--max-time 选项:

curl -X POST \
     -m 10 \
     -d "param1=value1&param2=value2" \
     http://example.com/api

这里的 10 表示 10 秒。

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值