原文标题为:Manual – curl usage explained

九、详细信息

不同的网络协议会提供获取特定文件或者文档详细信息不用的方法。想让curl显示单个文件的详细信息,你应该使用参数-I或者--head。使用该参数,执行结果将显示单个文档基于HTTP和FTP的所有可用信息。如果文档是基于HTTP的话,会有大量的信息可供查阅。

基于HTTP, 你可以使用-i或者--include获取文档实际数据之前的header信息(这部分内容与使用-I参数得出的header信息应该是一致的)。当你从FTP或者HTTP上获取文件时,可以使用参数-D或者--dump-header,这样curl就可以将文件的header信息保存到指定的文件里了。

下面举例说明,将HTTPheader存储到指定文件的方法,以header.txt文件为例:

curl --dump-header headers.txt curl.haxx.se

注意:header信息存储到指定的文件中对于你想使用curl向服务器发送cookes是一种非常有用的方法。更多内容请参见cookies小节。

十、POST (HTTP)

使用curl提交数据(post data)是非常容易的, 具体的方法就是使用参数-d <data>。待提交的数据必须经过urlencoded

修改一个简单的由姓名电话组成的留言本。

curl -d "name=Rafael%20Sagula&phone=3320780" \
http://www.where.com/guest.cgi

**举例说明怎样通过使用curl来提交一个表单:
在你想要填写的表单中找出所有的<input>标签,在curl的官网上有一个名叫formfind.plperl程序可以帮助你快速完成这一步骤。

如果这是一次“常规”的提交,你可以使得参数-d来完成提交。-d将会使用如下格式提交一份完成的”提交字符(post string)”:

<variable1>=<data1>&<variable2>=<data2>&...

变量(variable)是你在<input>标签中找到的表单项,如“name”; 而=后面的数据(data)就是你要在该表单项下填写的内容,但是注意这里的数据必须是经过URL编码的。这就意味着,你需要将空格替换成+, 而将字母替换为%XX,其中的XX的以十六进制表示的ASCII编码的字符。

举例说明:

表单页面为:

<form action="post.cgi" method="post"><input name=user size=10><input name=pass type=password size=10><input name=id type=hidden value="blablabla"><input name=ding value="submit">
</form>

我们在这表单中想输入用户为:foobar, 密码为:123456
要提供这份表单,你需要输入下面的curl命令:

curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" \
http://www.formpost.com/getthis/post.cgi

当使用参数-d时mime类型application/x-www-form-urlencoded通常会被CGI或者类似的接口所接受,curl同时还支持功能更强的multipart/form-data类型,后者提供诸如文件上传的功能。

-F接受-F "name=contents"形式的参数。如果你想从文件中读取表单的数据内容,可以使用<@filename>的形式来指定文件名。如果在指定文件的的同时,你还能指定文件的类型,那可以在文件名后面追加内容;type=<mime type>。你也在一个表单项中一次提交多份文件。
例如,使用名为’coolfiles’表单项用于提交三份类型不同的文件,应该使用如下的命令行格式:

curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
http://www.post.com/postit.cgi

如果文件的类型没有被指定,那么curl将会从文件的扩展名来判断文件的类型(其支持扩展名各类比较少),或者前面指定过文件类型的文件来判断(多个文件被指定在一个文件列表中),如果以上方法都不行的话,curl就会使用默认的类型application/octet-stream.

使用-F参数还填写一个有三个表单项的表单。三个表单项分别为:待提交的文件名、你的姓名和文件描述。待提交的文件名为cooltext.txt。使用curl来代替你常用的浏览器来提交表单,你必须从HTML源代码来读取表单,并找出待输入的表单项名称。在此例中,输入的表单项的名称分别为:fileyournamefiledscription.

curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
-F "filedescription=Cool text file with cool text inside" \
http://www.post.com/postit.cgi

想要在一次提交操作中上传二份文件,你需要使用如下二种方式之一:
1、在一个表单项中,填入多个文件:

curl -F "pictures=@dog.gif,cat.gif"

2、 使用二个表单项,分别填入一个文件:

curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif"

如果只是发送表单项的字面值(文件名),而不是发送实际文件,就不需要使用前缀@,<或者嵌入;type=, 这时推荐使用--form-string来代替-F。 特别是不能确定用户来源的情况下,使用-F来代替--form-string,将会使用户有机会欺骗curl来进行文件上传操作。

十一、REFERRER

一个HTTP请求应该包含跳转到当前有页面之前的页面的地址信息。curl允许你使用命令行来指定一个referrer。这对于欺骗依赖于特定信息的服务器程序或者CGI脚本来说是非常用的功能。

curl -e www.coolsite.com http://www.showme.com/

定义: referrer 属性可返回载入当前文档的文档的 URL。

十二、USER AGENT

一个HTTP请求应该包含生成该请求的浏览器的相关信息。curl允许你使用命令行来指定一个浏览器。 这对于只接受特定浏览器请求的服务器或者CGI脚本来说是非常有用的功能。
举例说明:

curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/

其他表示浏览器的字符串如下:

字符串 浏览器
‘Mozilla/3.0 (Win95; I)’ Netscape Version 3 for Windows 95
‘Mozilla/3.04 (Win95; U)’ Netscape Version 3 for Windows 95
‘Mozilla/2.02 (OS/2; U)’ Netscape Version 2 for OS/2
‘Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)’ NS for AIX
‘Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)’ NS for Linux

表示Internet Explorer如下,但由于兼容性问题,不是每一次尝试都能成功:

字符串 浏览器
‘Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)’ MSIE FOR W95

Mozilla以外的浏览器类型:

字符串 浏览器
‘Konqueror/1.0’ KDE File Manager desktop client
‘Lynx/2.7.1 libwww-FM/2.14’ Lynx command line browse

curl 使用举例详解(二)相关推荐

  1. Android面试Hash原理详解二

    Hash系列目录 Android面试Hash原理详解一 Android面试Hash原理详解二 Android面试Hash常见算法 Android面试Hash算法案例 Android面试Hash原理详解 ...

  2. 数据库事务隔离级别举例详解

    目录 一.前言 1.1.4种事务隔离级别 1.2.3种读现象 二.举例说明 2.1.读未提交 2.2.读已提交 2.3.可重复读 2.4.串行化 一.前言 本文主要对4种事务隔离级别,具体举例说明各自 ...

  3. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  4. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  5. PopUpWindow使用详解(二)——进阶及答疑

    相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  6. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  7. linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  8. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  9. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

最新文章

  1. Redis源码解析——前言
  2. non-member function cannot have cv-qualifier
  3. Flex 元数据标签使用
  4. c++ 在哪里找文档来看_FPX双C十四连败引热议!Doinb:我再也不跟LWX双排了
  5. Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
  6. 双缓冲技术绘图原理及简单的VC实现
  7. 算法题+JVM+自定义View,隔壁都馋哭了
  8. CSS之七个高度有效的媒体查询技巧
  9. JavaScript深度迭代遍历未知对象
  10. python检查字典中是否已存在给定键
  11. C++_类和对象_C++继承_继承中的构造和析构顺序---C++语言工作笔记064
  12. Dota2团战AI击败人类最全解析:能团又能gank,AI一日人间180年
  13. Kubernetes 小白学习笔记(33)--kubernetes云原生应用开发-总结
  14. tomcat设置一级域名、二级域名访问指定项目
  15. 运放 - 输出阻抗(Open loop output resistance)Ro
  16. sel4 手册总结之介绍与内核服务和对象
  17. 论机电一体化的发展By integration of machinery development
  18. 全文检索语句中的AND和OR的用法
  19. Check It Again: Progressive Visual Question Answering via Visual Entailment
  20. favicon.ico介绍,网页图标的制作动态网页图标

热门文章

  1. 2016,不念过往;2017,不畏将来
  2. 西南财经大学计算机类在哪个校区,西南财经大学有几个校区及校区地址
  3. 十一届中国大学生计算机设计大赛,2018第十一届中国大学生计算机设计大赛福建农林大学站...
  4. 谷歌浏览器当中出现adobe flash player已被屏蔽是什么意思?
  5. 【自撰】Linux虚拟机搭建
  6. 2022年辽宁沈阳市法库县招聘社区工作者精选题及答案
  7. 关于ARM架构和cortexM内核的知识总结
  8. 郭德纲的那张损嘴。。。
  9. PowerDesigner导出所有表到Excel(同一表格)
  10. bzoj 乱刷计划 50/50