curl是一个命令行工具,其基于libcurl库,用于发送网络请求,获取并展示响应数据,下面来看curl的具体用法。

1.下载网页源码

curl命令直接接URL,用于下载指定URL的网页源码,并将其显示在标准输出上:

  1. # curl http://www.cnblogs.com/bangerlee
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title>bangerlee - 博客园</title>
  7. ……
  8. </html>

我们可以使用 -o [文件名] 或用重定向将页面源码保存到指定文件。

2.仅获取响应的Header信息

我们知道使用HEAD方式的请求,将仅获取http响应的Header信息,使用curl的 -I/--head 选项可以达到仅获取Header的目的:

  1. # curl --head http://www.cnblogs.com
  2. HTTP/ OK
  3. Server: Tengine
  4. Date: Thu, Apr :: GMT
  5. Content-Type: text/html; charset=utf-
  6. Content-Length:
  7. Connection: keep-alive
  8. Vary: Accept-Encoding
  9. Cache-Control: public, max-age=
  10. Expires: Thu, Apr :: GMT
  11. Last-Modified: Thu, Apr :: GMT
  12. X-AspNetMvc-Version: 3.0
  13. X-AspNet-Version:
  14. X-Powered-By: ASP.NET
  15. X-UA-Compatible: IE=edge

从Header中我们可以了解到对应URL所在服务器的http服务器软件 (Tengine),用什么语言架构 (ASP.NET) 等信息。

3.设定跳转

默认情况下,对于返回301、302的响应curl是不会自动跳转的:

  1. # curl http://www.sina.com
  2. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  3. <html><head>
  4. <title> Moved Permanently</title>
  5. </head><body>
  6. <h1>Moved Permanently</h1>
  7. <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>
  8. </body></html>

以上 www.sina.com 被重定向到 www.sina.com.cn,使用 -L 选项可设置curl跳转到新URL:

  1. # curl -L http://www.sina.com
  2. <!Doctype html>
  3. <!--[,,] published at -- :: from # by system-->
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=gb2312" />
  7. <title>新浪首页</title>
  8. ……
  9. </html>

4.显示通信过程

-v 选项用于显示curl与目标服务器的通信过程,列出连接信息和请求信息:

  1. # curl -v http://www.cnblogs.com
  2. * About to connect() to www.cnblogs.com port (#)
  3. * Trying 42.121.252.58... connected
  4. * Connected to www.cnblogs.com ( (#)
  5. > GET / HTTP/1.1
  6. > User-Agent: curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/ libidn/1.10
  7. > Host: www.cnblogs.com
  8. > Accept: */*

5.发送表单信息

我们可以通过GET方式和POST方式向http服务器传送数据,GET方式比较简单:

  1. # curl example/form.cgi?data=xxx

POST方式需把数据和URL分开,这时可用 --data 选项:

  1. # curl --data="data=xxx" example/form.cgi

还可以使用 --data-urlencode 选项帮我们完成表单编码:

  1. # curl --data-urlencode="data=xxx" example.com/form.cgi

6.下载和上传ftp文件

以上介绍了一些http协议下curl的用例,curl也可用于ftp等文件传输协议,以下命令就用于下载ftp文件:

  1. # curl -u ftpuser:ftppass -o a.text ftp://ftp_server/public_html/a.text

以下命令列出ftp目录下的文件列表:

  1. # curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

以下命令可上传文件至ftp服务器:

  1. # curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

7.查字典

基于DICT协议,curl还有个有趣的应用,我们可以用curl来查字典:

  1. # curl dict://dict.org/d:banger
  2. pan.alephnull.com dictd /rf on Linux --server <auth.mime> <@pan.alephnull.com>
  3. ok
  4. definitions retrieved
  5. "banger" wn "WordNet (r) 3.0 (2006)"
  6. banger
  7. n : (British informal) pork sausage
  8. : firework consisting of a small explosive charge and fuse in a
  9. heavy paper casing [syn: {firecracker}, {cracker}, {banger}]
  10. .
  11. ok [d/m/c = //; .000r ..000s]
  12. bye [d/m/c = //; .000r ..000s]

curl工具使用实例的更多相关文章

  1. php中实现的一个curl批处理的实例

    curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: header("Content-Type:text/html;ch ...

  2. Elasticsearch笔记二之Curl工具基本操作

    Elasticsearch笔记二之Curl工具基本操作 简介: Curl工具是一种可以在命令行访问url的工具,支持get和post请求方式.-X指定http请求的方法,-d指定要传输的数据. 创建索 ...

  3. MySQL基准测试(三)--开源工具与实例演示

    MySQL基准测试(三)--开源工具与实例演示 针对web应用 ab ab是一个Apache HTTP服务的基准测试工具. http_load http_load是一个针对Web服务器测试工具. JM ...

  4. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例

    Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...

  5. curl 工具的使用

    curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数 curl命令参数很多,这里只列出我 ...

  6. Nunit测试工具使用实例

    前言: 本文主要是介绍了Nunit的基本使用,其中参详了很多已有的文章,由于最近要使用其进行测试,所以对网上的文章做了下整理,同时加入了一些自己的实践. NUnit的属性 TestFixture 它标 ...

  7. JDBC工具类实例

    本文以讲解用单利模式实现一个简单的JDBC实用工具类JDBC连接的四个基本步骤:1.加载相应数据库驱动2.建立相应数据库连接3.构建Statement语句,即增删改查SQL语句4.执行Statemen ...

  8. Curl工具的使用

      Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 工具下载 在官网处下载工具包:http:// ...

  9. curl工具介绍和常用命令

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.Linux发行版中,并且有DOS和Win32.Win64的移植版本.curl是一个利用URL规则在命令行下工作的文 ...

随机推荐

  1. scrapy 发post请求

    可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求. 如果希望程序执行一开始就发送POST请求,可以重写Spider类的s ...

  2. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  3. 9.秋招复习简单整理之Spring面试AOP和IOC的理解

    1.Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用 ...

  4. c++学习书籍推荐《C++设计新思维》下载

    百度云及其他网盘下载地址:点我 译序by 侯捷 i 译序by 於春景 iii 目录 v 序言by scott meyers xi 序言by john vlissides xv 前言 xvii 致谢 x ...

  5. Java学习笔记之---比较接口与抽象类

    Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...

  6. 数据结构与算法---线索化二叉树(Threaded BinaryTree)

    先看一个问题 将数列 {1, 3, 6, 8, 10, 14  } 构建成一颗二叉树 问题分析: 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8 ...

  7. Java项目案例之---常用工具类练习

    常用工具类练习 1. 请根据控制台输入的特定日期格式拆分日期,如:请输入一个日期(格式如:**月**日****年),经过处理得到:****年**月**日 import java.util.Scanne ...

  8. HashMap中的hash算法中的几个疑问

    HashMap中哈希算法的关键代码 //重新计算哈希值 static final int hash(Object key) { int h; return (key == null) ? 0 : (h ...

  9. Java编程思想:简单的泛型

    import java.util.ArrayList; import java.util.Random; public class Test { public static void main(Str ...

  10. Vue根据不同的路由文件实现打包差异化

    有些时候我们经常一个项目中开发不同的功能,有可能一个前端项目中夹杂着不同系统之间的需求,最后打包发布的时候经常会将与项目不相关的代码一同打包进去,实际来讲这种操作也是不严谨的.那有没有办法可以根据某些 ...