标签搜索

curl与wget详解

mrui
2025-09-13 / 0 评论 / 10 阅读 / 正在检测是否收录...

curl简介

全称是"Client URL",顾名思义就是一个URL客户端工具。它最大的特点就是支持的协议特别多,HTTP、HTTPS、FTP、FTPS、SCP、SFTP、LDAP等等,基本上你能想到的网络协议它都支持。

curl测试API接口非常方便。比如说要测试一个REST API,用curl简直不要太方便:

[root@webtest ~]# curl -X GET https://v2.jinrishici.com/token
{"status":"success","data":"5w1dZp7lNh+NpR0Ws6OG6TGCqp/2UgMf"}

这样就能快速看到接口返回的数据,比打开浏览器或者用Postman要快多了。

curl还有个很牛的地方就是它的参数特别丰富,几乎可以模拟任何HTTP请求。想要发送POST请求?没问题:

curl -X POST -H "Content-Type: application/json" -d '{"name":"张三","age":25}' https://api.example.com/users

需要带认证信息?也很简单:

curl -u username:password https://api.example.com/protected
或者用Bearer token:

curl -H "Authorization: Bearer your_token_here" https://api.example.com/data

wgetwget简介

wgetwget的全称是"Web Get",它主要是用来从网络上获取文件的。相比curl,wget更专注于下载这一件事,在下载方面它做得确实很出色。

wget有个递归下载功能。有一次需要备份一个静态网站,用wget一条命令就搞定了:

wget -r -np -k -L -p https://example.com/

这条命令会把整个网站都下载下来,包括CSS、JS、图片等所有资源,而且还会自动调整链接,下载完直接就能在本地打开。

wget还有个很实用的功能就是断点续传。下载大文件的时候网络断了不用担心,加个-c参数就能接着下载:

wget -c https://example.com/bigfile.zip

这个功能在网络不稳定的时候简直是救命稻草。

两者的主要区别在哪里?
最大的区别就是设计理念不同。curl更像是一个瑞士军刀,什么都能干,但是每样都不是最专业的;wget就像是一个专业的下载工具,在下载这件事上做得特别精细。

从使用场景来说,一般是这样选择的:

需要测试API、发送复杂HTTP请求的时候用curl
单纯下载文件,特别是大文件或者需要递归下载的时候用wget
需要在脚本里处理HTTP响应数据的时候用curl
需要镜像整个网站或者批量下载的时候用wget

curl的高级用法

说到curl的高级用法,那可真是太多了。我经常用到的几个技巧分享给大家:

  • 保存响应头信息
    有时候需要查看服务器返回的头信息,可以用-I参数:

    curl -I https://www.baidu.com

或者既要响应体又要响应头:

curl -i https://api.example.com/data
  • 跟随重定向
    默认情况下curl不会跟随重定向,需要加-L参数:

    curl -L https://short.url/abc123
    
  • 设置超时时间
    网络不好的时候设置个超时时间很有必要:

    curl --connect-timeout 10 --max-time 30 https://slow.server.com
  • 使用代理
    需要通过代理访问的时候:

    curl --proxy http://proxy.server:8080 https://example.com
    
  • 上传文件
    curl还能上传文件,这个功能很多人不知道:

    curl -X POST -F "file=@/path/to/file.txt" https://upload.example.com
  • 保存和使用Cookie
    处理需要登录的网站时,Cookie管理很重要:

    #保存cookie
    curl -c cookies.txt -d "username=admin&password=123456" https://example.com/login
    
    # 使用cookie
    curl -b cookies.txt https://example.com/protected

    wget的实用技巧

    wget虽然看起来简单,但是用好了也很强大。

  • 限制下载速度
    在服务器上下载大文件的时候,为了不影响其他服务,可以限制下载速度:

    wget --limit-rate=200k https://example.com/bigfile.zip
  • 后台下载
    下载大文件时可以放到后台运行:
wget -b https://example.com/hugefile.iso

下载进度会保存在wget-log文件里,可以用tail命令查看:

      
tail -f wget-log
  • 批量下载
    有个URL列表文件的话,可以批量下载:

    wget -i urls.txt

    urls.txt文件里每行一个URL就行。

  • 设置重试次数
    网络不稳定的时候可以设置重试:

    wget --tries=3 --waitretry=2 https://unstable.server.com/file.zip
  • 递归下载的高级选项
    递归下载网站的时候,有很多参数可以控制行为:

    wget -r -np -nd -A "*.pdf" -R "*.html" https://example.com/documents/

    这条命令会递归下载所有PDF文件,但是排除HTML文件,而且不创建目录结构。

实际工作中的应用场景

  • 监控网站可用性
    写个简单的脚本监控网站是否正常:

    #!/bin/bash
    response=$(curl -s -o /dev/null -w "%{http_code}" https://mywebsite.com)
    if [ $response -eq 200 ]; then
      echo "网站正常"
    else
      echo "网站异常,状态码:$response"
    fi
  • 自动化部署脚本
    部署的时候经常需要下载最新的安装包:

    #!/bin/bash
    # 获取最新版本号
    latest_version=$(curl -s https://api.github.com/repos/user/project/releases/latest | grep tag_name | cut -d '"' -f 4)
    
    # 下载最新版本
    wget https://github.com/user/project/releases/download/${latest_version}/project-${latest_version}.tar.gz
    API接口测试
    测试POST接口的时候,curl特别方便:
    
    # 测试用户注册接口
    curl -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "username": "testuser",
      "email": "test@example.com",
      "password": "123456"
    }' \
    https://api.example.com/register
  • 文件备份
    定期备份重要文件到远程服务器:

    #!/bin/bash
    # 打包文件
    tar -czf backup-$(date +%Y%m%d).tar.gz /important/data/
    
    # 上传到远程服务器
    curl -T backup-$(date +%Y%m%d).tar.gz ftp://backup.server.com/backups/ --user username:password

    常见问题和解决方案

    用这两个工具的时候,经常会遇到一些问题,常见的几个:

  • SSL证书问题
    有时候遇到自签名证书或者证书有问题的网站,可以跳过证书验证:

    # curl跳过证书验证
    curl -k https://self-signed.example.com
    
    # wget跳过证书验证
    wget --no-check-certificate https://self-signed.example.com/file.zip

    不过这样做有安全风险,生产环境要谨慎使用。

  • 中文文件名乱码
    下载中文文件名的文件时可能会乱码,可以设置编码:

    wget --restrict-file-names=nocontrol https://example.com/中文文件.zip
  • 大文件下载超时
    下载大文件时经常会超时,可以调整超时设置:

    # curl设置超时
    curl --connect-timeout 30 --max-time 3600 -O https://example.com/bigfile.zip
    
    # wget设置超时
    wget --timeout=30 --read-timeout=3600 https://example.com/bigfile.zip
0

评论 (0)

取消