美文网首页Linux基础学习教程
Linux 基础教程 46-cURL详细讲解

Linux 基础教程 46-cURL详细讲解

作者: Surpassme | 来源:发表于2022-07-21 23:08 被阅读0次

        cURL是常用的URL命令行请求工具,常用于Linux系统中,向Web Server发送请求。它的名字就是客户端(client)的 URL 工具的意思。以下示例,我们以CentOS 7.9为演示环境,来看看cURL的一些常用用法

    1. cURL安装

    [root@surpass ~]# yum install -y  curl
    

    2. cURL命令语法

    curl [options...] <URL>
    

    2.1 URL 格式

        在万维网上,每一个信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是万维网的统一资源定位标志,就是指网络地址。URL的格式定义要参考 RFC 1808 。
        URL由三部分组成:资源类型存放资源的主机域名资源文件名。也可认为由4部分组成:协议主机端口路径,URL的一般语法格式为:

    protocol://hostname[:port]/path/[;parameters][?query]#fragment
    

    带[]的为可选项

    • 1.protocol

        指定使用的传输协议。以下为部分支持的传输协议(常用的是HTTP协议)。

    协议 说明 格式
    file 资源是本地计算机上的文件 格式file:///
    ftp 通过 FTP访问资源 格式 ftp://
    http 通过 HTTP 访问该资源 格式 http://
    https 通过安全的 HTTPS 访问该资源 格式 https://
    mailto 资源为电子邮件地址,通过 SMTP 访问 格式 mailto:
    • 2.hostname

        指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,也可以在主机名前包含连接到服务器所需的用户名和密码(格式:username:password@hostname)

    • 3.port

        整数可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。

    • 4.path

        由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

    • 5.parameters

        用于指定特殊参数的可选项

    • 6.query

        可选,用于给网页传递参数,可有多个参数,用 & 符号隔开,每个参数的名和值用 = 符号隔开。

    • 7.fragment

        字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

    2.2 参数详解

    • 1.-A, --user-agent

        -A 参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]。

    [root@surpass ~]# curl -A "Surpass/v2.0" http://httpbin.org/get
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Host": "httpbin.org", 
        "User-Agent": "Surpass/v2.0", 
        "X-Amzn-Trace-Id": "Root=1-6215aac3-155eacd652f66bfa65f0f6a2"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/get"
    }
    
    • 2.-b, --cookie

        -b参数用来向服务器发送 Cookie。

    root@surpass ~]# curl -b "name=Surpss" http://httpbin.org/get
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Cookie": "name=Surpss", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215ab74-0d1ad58915275e54624c5b85"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/get"
    }
    
    • 3.-c, --cookie-jar

        -c 参数将服务器设置的 Cookie 写入一个文件

    [root@surpass Surpass]# curl -c /home/Surpass/cookies.txt http://www.baidu.com/
    ...
    [root@surpass Surpass]# cat /home/Surpass/cookies.txt 
    # Netscape HTTP Cookie File
    # http://curl.haxx.se/docs/http-cookies.html
    # This file was generated by libcurl! Edit at your own risk.
    
    .baidu.com  TRUE    /   FALSE   1645674025  BDORZ   27315
    
    • 4.-X, --request

        -X参数指定 HTTP 请求的方法

    [root@surpass Surpass]# curl -X GET http://httpbin.org/get
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215ad49-66df43ca728c5acd0f72dc90"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/get"
    }
    
    • 5.-d, --data

        -d参数用于发送 POST 请求的数据体

    [root@surpass Surpass]# curl -X POST -d "name=Surpass&city=Shanghai" http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "city": "Shanghai", 
        "name": "Surpass"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Content-Length": "26", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215adba-49ec43a362fd317d050a8aa4"
      }, 
      "json": null, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    

    使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST

        -d参数可以读取本地文本文件的数据,向服务器发送。

    [root@surpass Surpass]# cat surpass.txt 
    name=Surpass&city=Shanghai
    [root@surpass Surpass]# curl -X POST -d "@/home/Surpass/surpass.txt" http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "city": "Shanghai", 
        "name": "Surpass"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Content-Length": "26", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215ae49-77106731260a6aa23b3fe128"
      }, 
      "json": null, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    
    • 6.--data-urlencode

        --data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。

    • 7. -e, --referer

        -e参数用来设置 HTTP 的标头Referer,表示请求的来源

    curl -e "http://www.baidu.com" http://httpbin.org/get
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Host": "httpbin.org", 
        "Referer": "http://www.baidu.com", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b029-32ad83970dd3997f16e46bf6"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/get"
    }
    
    • 7. -F, --form

        -F参数用来向服务器上传二进制文件

    [root@surpass Surpass]# curl -F "@file=/home/Surpass/cp.exe" -X POST http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "@file": "/home/Surpass/cp.exe"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Content-Length": "160", 
        "Content-Type": "multipart/form-data; boundary=----------------------------4dfc834637a8", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b100-241d9f35053c8ca12b5d95d2"
      }, 
      "json": null, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    

        -F参数可以指定 MIME 类型

    curl -F "file=@Surpass.png;type=image/png" -X POST http://httpbin.org/post
    
    • 8. -G, --get

        -G参数用来构造 URL 的查询字符串

    [root@surpass Surpass]# curl -G -d "name=Surpass" -d "city=Shanghai" http://httpbin.org/get
    {
      "args": {
        "city": "Shanghai", 
        "name": "Surpass"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b222-60aa0b090adea66a01b6d883"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/get?name=Surpass&city=Shanghai"
    }
    
    • 9. -H, --header

        -H参数添加 HTTP 请求的标头。

    [root@surpass Surpass]# curl -H "Accept:application/json" -H "Content-Type:application/json" -d '{"name":"Surpass","city":"Shanghai"}' -X POST http://httpbin.org/post
    {
      "args": {}, 
      "data": "{\"name\":\"Surpass\",\"city\":\"Shanghai\"}", 
      "files": {}, 
      "form": {}, 
      "headers": {
        "Accept": "application/json", 
        "Content-Length": "36", 
        "Content-Type": "application/json", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b33a-1eb87b6c4a6d963733fe1b64"
      }, 
      "json": {
        "city": "Shanghai", 
        "name": "Surpass"
      }, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    
    • 10. -I, --head

        -I参数向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来

    [root@surpass Surpass]# curl -I http://httpbin.org/bin/get
    HTTP/1.1 404 NOT FOUND
    Date: Wed, 23 Feb 2022 04:09:58 GMT
    Content-Type: text/html
    Content-Length: 233
    Connection: keep-alive
    Server: gunicorn/19.9.0
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    
    • 11. -k, --insecure

        -k参数指定跳过 SSL 检测。

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

    上面命令不会检查服务器的 SSL 证书是否正确

    • 12. -o, --output

        -o参数将服务器的回应保存成文件,等同于wget命令

    [root@surpass Surpass]# curl -o /home/Surpass/baidu.html -k https://www.baidu.com/
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2443  100  2443    0     0  10585      0 --:--:-- --:--:-- --:--:-- 10621
    
    • 13. -u, --user

        -u参数用来设置服务器认证的用户名和密码

    [root@surpass Surpass]# curl -X POST -u "Surpass:123456" http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {}, 
      "headers": {
        "Accept": "*/*", 
        "Authorization": "Basic U3VycGFzczoxMjM0NTY=", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b50b-235bcd7559c3b10526661841"
      }, 
      "json": null, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    

    上面命令设置用户名为Surpass,密码为123456,然后将其转为 HTTP 标头Authorization: "Basic U3VycGFzczoxMjM0NTY=

    • 14. --limit-rate

        --limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境

    [root@surpass Surpass]# curl -X POST -u "Surpass:123456" --limit-rate 20k  http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {}, 
      "headers": {
        "Accept": "*/*", 
        "Authorization": "Basic U3VycGFzczoxMjM0NTY=", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.29.0", 
        "X-Amzn-Trace-Id": "Root=1-6215b608-37ebfcef62e94fd92413f270"
      }, 
      "json": null, 
      "origin": "58.34.128.34", 
      "url": "http://httpbin.org/post"
    }
    
    • 15. -O, --remote-name

        -O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名

    [root@surpass Surpass]# curl -O  http://www.downcc.com/soft/265486.html
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   311    0   311    0     0   3963      0 --:--:-- --:--:-- --:--:--  3987
    [root@surpass Surpass]# ll
    total 164
    -rw-r--r-- 1 root root    311 Feb 22 23:23 265486.html
    
    • 16. -L, --location

        -L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向

    [root@surpass Surpass]# curl -I http://www.baidu.cn/
    HTTP/1.1 302 Found
    Location: http://www.baidu.com/
    Date: Wed, 23 Feb 2022 06:14:23 GMT
    Content-Type: text/plain; charset=utf-8
    
    [root@surpass Surpass]# curl -I -L http://www.baidu.cn/
    HTTP/1.1 302 Found
    Location: http://www.baidu.com/
    Date: Wed, 23 Feb 2022 06:14:31 GMT
    Content-Type: text/plain; charset=utf-8
    
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: keep-alive
    Content-Length: 277
    Content-Type: text/html
    Date: Wed, 23 Feb 2022 06:14:31 GMT
    Etag: "575e1f60-115"
    Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
    

    相关文章

      网友评论

        本文标题:Linux 基础教程 46-cURL详细讲解

        本文链接:https://www.haomeiwen.com/subject/cqwpirtx.html