curl 使用举例详解(二)
原文标题为:Manual – curl usage explained
九、详细信息
不同的网络协议会提供获取特定文件或者文档详细信息不用的方法。想让curl
显示单个文件的详细信息,你应该使用参数-I
或者--head
。使用该参数,执行结果将显示单个文档基于HTTP和FTP的所有可用信息。如果文档是基于HTTP的话,会有大量的信息可供查阅。
基于HTTP, 你可以使用-i
或者--include
获取文档实际数据之前的header
信息(这部分内容与使用-I
参数得出的header
信息应该是一致的)。当你从FTP
或者HTTP
上获取文件时,可以使用参数-D
或者--dump-header
,这样curl
就可以将文件的header
信息保存到指定的文件里了。
下面举例说明,将HTTP
的header
存储到指定文件的方法,以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.pl
的perl
程序可以帮助你快速完成这一步骤。
如果这是一次“常规”的提交,你可以使得参数-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源代码来读取表单,并找出待输入的表单项名称。在此例中,输入的表单项的名称分别为:file
,yourname
和filedscription
.
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 使用举例详解(二)相关推荐
- Android面试Hash原理详解二
Hash系列目录 Android面试Hash原理详解一 Android面试Hash原理详解二 Android面试Hash常见算法 Android面试Hash算法案例 Android面试Hash原理详解 ...
- 数据库事务隔离级别举例详解
目录 一.前言 1.1.4种事务隔离级别 1.2.3种读现象 二.举例说明 2.1.读未提交 2.2.读已提交 2.3.可重复读 2.4.串行化 一.前言 本文主要对4种事务隔离级别,具体举例说明各自 ...
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- PopUpWindow使用详解(二)——进阶及答疑
相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...
- Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
最新文章
- Redis源码解析——前言
- non-member function cannot have cv-qualifier
- Flex 元数据标签使用
- c++ 在哪里找文档来看_FPX双C十四连败引热议!Doinb:我再也不跟LWX双排了
- Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
- 双缓冲技术绘图原理及简单的VC实现
- 算法题+JVM+自定义View,隔壁都馋哭了
- CSS之七个高度有效的媒体查询技巧
- JavaScript深度迭代遍历未知对象
- python检查字典中是否已存在给定键
- C++_类和对象_C++继承_继承中的构造和析构顺序---C++语言工作笔记064
- Dota2团战AI击败人类最全解析:能团又能gank,AI一日人间180年
- Kubernetes 小白学习笔记(33)--kubernetes云原生应用开发-总结
- tomcat设置一级域名、二级域名访问指定项目
- 运放 - 输出阻抗(Open loop output resistance)Ro
- sel4 手册总结之介绍与内核服务和对象
- 论机电一体化的发展By integration of machinery development
- 全文检索语句中的AND和OR的用法
- Check It Again: Progressive Visual Question Answering via Visual Entailment
- favicon.ico介绍,网页图标的制作动态网页图标