用CURL来发送HTTP请求的方法

上传人:宝路 文档编号:18171360 上传时间:2017-11-13 格式:DOCX 页数:11 大小:31.55KB
返回 下载 相关 举报
用CURL来发送HTTP请求的方法_第1页
第1页 / 共11页
用CURL来发送HTTP请求的方法_第2页
第2页 / 共11页
用CURL来发送HTTP请求的方法_第3页
第3页 / 共11页
用CURL来发送HTTP请求的方法_第4页
第4页 / 共11页
用CURL来发送HTTP请求的方法_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《用CURL来发送HTTP请求的方法》由会员分享,可在线阅读,更多相关《用CURL来发送HTTP请求的方法(11页珍藏版)》请在金锄头文库上搜索。

1、用 CURL 来发送 HTTP 请求的方法原文:Online: http:/curl.haxx.se/docs/httpscripting.html 翻译:豆连军 假设您已经熟悉了 HTML 和基本网络知识。 拥有脚本语言编写能力对于设计一个漂亮的计算机系统非常重要。UNIX 有 shell 脚本和 各种 Tools 工具,这些可以用来执行各种自动化命令和脚本,从而大大拓展了 UNIX 的计算 能力。这是 UNIX 为什么如此成功的原因之一。 越来越多的应用转向了 WEB,这使得 HTTP 执行脚本变得更频繁和迫切。为了从 web 获得更多的信息,模拟用户浏览、发帖、上传数据等,今天已经成了

2、我们重要工作内容。 Curl 是一个命令行工具, 用来执行各种 URL 操作和信息传输。 但在本文中将着重描述如 何用 Curl 来完美地执行 HTTP 请求。 我假定您知道如何调用curl help或者curl manual来获 得 curl 的基本信息。 Curl 自然不是所有事情都能干。Curl 只是生成请求包,获得数据,发送数据获得信息。 你可以使用脚本语言或者重复手工调用来完成你想要做的所有事情。 1. HTTP 协议 HTTP 用来从 WEB 服务器获得数据。它也是一种建筑在 TCP/IP 之上的简单协议。HTTP 允许从客户端向服务器端发送数据,这些数据有多种不同的操作方法。这里

3、将给予说明。 HTTP 是一些 ASCII 文字行,这些 ASCII 文字从客户端发送给服务器端来请求一个特别的 操作。然后,服务器端在发送给客户端的实际请求内容之前回应一些文字行。 客户端,也就是 curl,发送一个 HTTP 请求,该请求包含一个操作方法(比如: GET,POST,HEAD 等) ,一组请求头,以及某些时候再携带一些请求消息体。HTTP 服务器响应 一个状态行(表明操作结果是否成功) ,响应头,以及大多数情况下还有响应消息体。消息 体部分是你请求的实际数据,比如 HTML 或者图片等。 1.1 查看协议 使用 Curl 选项 verbose(或者v)可以显示 curl 发送

4、了什么样的命令给服务器端, 以及显 示其他的一些信息。 verbose 是一个非常有用的选项,可以用来调试以及历届 curl 和 server 端之间的交互 操作。 有时verbose 选项仍然不满足调试需求,这时 trace 和traceascii 选项可以提供 curl 发送和接收的所有详细信息。下面是示例: # curl -trace-ascii debugdump.txt http:/ URL URL 是你用来表达一个特定互联网资源如何定位寻址的一种格式。你看到的 URL 比如: http:/curl.haxx.se or https:/ a million times. 3. 获得一

5、个网页 最简单和最常用的 HTTP 请求操作是 Get 一个 URL。这个 URL 可能指向一个 web 页面,一副图片,或者一个文件。客户端表达一个 GET 请求发送给服务器端,并接收所请的文档。 比如:你表达了一个命令行: # curl http:/curl.haxx.se 在终端窗口中你会获得一个 web 页面,这就是 URL 指向的完整的 HTML 文档。 所有 HTTP 应答都包含了一组响应头,这些响应头通常被隐藏起来。使用 curl 的 include(i)选项可以显示这些响应头。你可以使用head(I)选项来单单请求响应头。这 是通过 curl 发送一个 HEAD 请求来实现的。

6、 4. Form 表单 Form 表单的这样一种作用:网站用来提供一个网页,该网页包含一组 Fields,用户需要 输入数据,然后点击“OK”或者 “确认”按钮,发送这些数据到服务器端。服务器然后使 用这些发过来的数据来决定如何做下一步响应。 比如使用输入的文字来检索数据库, 或者在 一个 bug 跟踪系统中登记信息, 在一个地图上显示输入的地址, 或者校验输入的用户名口令 是否合法。 当然,接收你发送数据的服务器端还是存在着某种程序,你不能凭空产生。 4.1 GET 一个 GET 表单使用了 GET 方法,HTML 中是如下描述的: 在浏览器端,该表单会展现一个文字输入框和“OK”按钮。如果

7、你输入 “1905”并点 击 “ OK ” 按 钮 , 浏 览 器 会 生 成 一 个 新 的 URL , 该 URL 将 使 用 GET 方 法 。 该 junk.cgi?birthyear=1905&press=OK衔接在先前的 URL 的 PATH 后面。 如果原表单 展现在 页面上,则第二 个页面将是 绝大多数搜索引擎采用这种工作方式。 要使 Curl 做同样的事情,只需要键入如下命令: # curl http:/ POST GET 方法将把所有输入的 Fields 名称显示在浏览器的 URL 中。 这一般是一种比较好的做 法,这种做法可以帮助你来保持书签。但是这也是一种显而易见的

8、危险行为,比如你输入了 秘密信息,或者输入了大量的 Fields 造成 URL 非常长难以阅读。 HTTP 协议提供了 POST 方法。该方法在客户端发送时,将数据从 URL 中分离出来,因 此你不会在 URL 地址栏中看到任何数据内容。 表单与之前描述的表单非常类似: 使用 curl 发送携带了上次数据的表单,我们可以这样做: # curl -data birthyear=1905&press=%20OK%20 http:/ 这种 POST 操作使用的 ContentType 为 application/xwww form urlencoded ,并且这是 一种应用最广泛的 POST 方法。

9、 你发送给服务器端的数据必须是已经被准确地编码了。 不会自动帮你做此事。 curl 例如: 如果你想使用包含了空格的数据, 你需要使用%20 来替换空格等。 错误的请求将很可能造成 你发送的数据错误,并出现混乱。 新版本的 curl 能够执行 URL 编码的 POST 数据,比如: # curl -data-urlencode name=I am Daniel http:/4.3 文件上传 POST 在 1995 年定义了一种通过 HTTP 协议 POST 数据的方法。这就是 RFC 1867。其中 RFC1867posting 部分将在此被引用。 该方法主要设计来支持文件的上传。 一个表单允

10、许用户上传一个文件, 如同下面的 HTML 代码: 上面代码清楚地描述了将要发送内容的 ContentType 是 multipart/formdata。 POST 一个表单,如果使用 CURL,则你只需要键入下面的命令: # curl -form upload=localfilename -form press=OK URL4.4 隐藏 Fields 在 HTML 应用中,有一个很常用的在页面之间传输状态信息的方法,就是将隐藏 Fields 放到表单中。隐藏 Fields 事先被填充好了数据。这些 Fields 不会被显示给用户看,它们会跟 其他 Fields 一道被传送给服务器端。 同一个

11、可见 Field 用法类似,一个隐藏 Field 和一个 submit 按钮见下述示例: 使用 curl 来发送上述表单,你不必考虑这些 Fields 是隐藏的或者不是隐藏的。实现上述 功能的 Curl 用法与上例中是相同的。 # curl -data birthyear=1905&press=OK&person=daniel URL4.5 展示 POST 请求 当你使用 curl 代替浏览器填充一个表单并发送给服务器端时, 你一定会对发送和浏览器 一样的 POST 请求感兴趣。 一个简单的办法可以看到这个过程。你可以将包含 Form 表单的 HTML 页面存储到本地 硬盘上, 修改表单的 m

12、ethod 为 GET, 然后点击 submit 按钮 (当然, 你也可以修改 Action URL) 。 你将清楚地看到发送的数据附加在 URL 之后,它们之间采用?符号分割,就如同 GET 表单的发送过程一样。 5. PUT 上传数据到一个 HTTP 服务器的可能最好的方法是使用 PUT 操作。然后,当然服务器端 必须有一个脚本或者程序来接收这些 HTTP PUT 流。 使用 CURL 上传一个文件到 HTTP 服务器,用法如下: # curl -upload-file uploadfile http:/ HTTP 认证鉴权 HTTP 认证(Authentication)是一种通过校验你的

13、用户名及密码来验证你是否有权执行相 关操作的机制。基本的鉴权机制也是缺省的机制是*plain*text* based, 顾名思义,它发送 的用户名和密码看起来稍显杂乱,但仍然可以被读懂。 通过 Curl 来使用用户名口令的鉴权,示例如下: # curl -user name:password http:/ 网站可能要求一种不同的鉴权机制(检查服务器端回应的 Header 头) ,这时,你可以使 用ntlm, digest, negotiate 或 anyauth 等选项。 某些时候,你的 HTTP 访问需要通过 HTTP 代理完成。这是在很多公司存在的。HTTP 代 理一般需要验证它自己发放的

14、账户口令来决定是否准许访问 INTERNET。 用 curl 来实现上述要求,可以使用如下命令行: # curl -proxy-user proxyuser:proxypassword curl.haxx.se 如果你的代理要求使用 NTLM 方法来认证, 则使用proxyntlm 选项。 如果要求 Digest, 则使用proxydigest 选项。 如果你使用任何 user+passord 选项,但是没有标明 password 部分,curl 将提示一个 password 交互窗口。 要注意的是,当一个程序执行时,查看这些进程时,它的参数可能会显示出来。这样, 如果你执行一个直白的命令行选

15、项,则其他用户可能会看到你的密码。这里有避免的方法。 这值得注意的是, HTTP 认证时如何工作的。很多很多 WEB 站点不会使用这种登陆认证 方式。后面的 WEB 登陆章节会有进一步的细节说明。 7. Referer HTTP 请求可以包含一个 referer字段( 虽然这个拼写有误) ,该字段说明这个 URL 请求是 来自于客户端的那个 URL 文档。 某些程序/ 脚本检查请求中的 referer 字段来校验它是否来自 于外部站点或者一个未知的页面。当然,检查如此容易的伪造是一个傻瓜做法。许多脚本仍 然在这么做。使用 CURL,你可以在 referer 字段中放任何数据,并且非常容易地愚弄服务器 端来响应你的请求。 使用 CURL 来设置 referer 字段: # curl -referer http:/e http:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号