AnyEvent::HTTP 介绍
AnyEvent::HTTP - simple but non-blocking HTTP/HTTPS client 一个简单的非堵塞的 HTTP/HTTPS 客户端:
use AnyEvent::HTTP;
http_get “http://www.nethype.de/“, sub { print $_[1] };
# … do something else here
描述:
该模块是一个AnyEvent user,你需要确保你使用和运行一个支持的event loop.
use AnyEvent::HTTP;
my $cv = AnyEvent->condvar;
http_get “https://zjcap.cn“, sub { print _[0] };cv->recv();
返回响应内容,$_[0] 函数的第一个参数是响应内容
这个模块实现了一个简单的,无状态的和非堵塞的HTTP 客户端。
它支持GET,POST和其他请求方法,cookies或者更多, 所有都在一个非常低的level.
它可以跟随重定向,支持代理服务器,并自动限制 连接数
它通常应该是一个好的客户端,对于大多数HTTP任务是足够的。
简单的任务应该是简单的, 但是复杂的任务应该仍然是有可能的,因为用户
保持控制请求和响应头。
caller 是负责认证管理,cookies(如果简单的实现在这个模块不是足够的),
引用和其他高层协议的细节
METHODS 方法:
http_get url,key=>value...,cb->(data,headers)
执行一个HTTP-GET请求,查看http_request 函数对于细节在额外的参数和返回值。
http_head url,key=>value...,cb->(data,headers)
执行一个HTTP-HEAD 请求, 查看http_request 函数得到额外的参数和返回值
http_post url,body, key => value…, cb−>(data, $headers)
执行一个HTTP-POST 请求以请求body, 查看http_request函数得到额外的参数和返回值
http_request method=>url, key => value…, cb−>(data, $headers)
执行一个HTTP 请求类型的方法,URL必须是一个绝对的http或者https URL必须是一个绝对的http或者https
当被调用在空的上下文,没有返回。在其他情况下,
http_request 返回一个 “cancellation guard”。
你必须应该保持对象至少alive 直到回调get被调用。
如果对象gets被摧毁在回调被调用前, 请求会被取消。
回调函数会被调用带上响应body 数据作为第一个参数( 或者undef如果一个错误发生),
一个hash-ref 带上一个响应header 作为第2个参数。
所有的header 在那个hash里是小写的,除了响应头,
伪头(大写来避免可能冲击可能的响应头),
状态和原因包含HTTP状态行的3个部分,如果一个错误发生在一个请求的body阶段
那么原始的状态和原因之从header是可用的作为原始状态和原始原因。
伪标头URL 包含实际的URL( 不同于请求的URL当跟随者重定向–比如,
你可能得到一个错误的 你的URL scheme 是不支持的 尽管你的URL 是一个正确的
http URL 因为它重定向到一个ftp URL, 在这种情况下,你可以看看URL伪报头
伪头重定向只存在当 请求是一个内部的重定向的结果。
在那种情况下, 它是一个array 引用 带有(data,headers) 从重定向的响应。
注意 这个响应是一个重定向本身的结果
如果server 多次发送一个header,它们的内容会被连接在一起用’,’,作为HTTP规范
如果一个内部错误发生,比如不能解析hostname, 那么$data是undef
$headers->{Status} 状态会是590-599,当前使用的状态码如下:
595 - errors during connection establishment, proxy handshake.
596 - errors during TLS negotiation, request sending and header processing.
597 - errors during body receiving or processing.
598 - user aborted request via on_header or on_body.
599 - other, usually nonretryable, errors (garbled URL etc.).
一个典型的请求看起来像这样:
sub {
my (body,hdr) = @_;
if ($hdr->{Status} =~ /^2/) {
... everything should be ok
} else {
print "error, $hdr->{Status} $hdr->{Reason}\n";
}
}
附加的参数是键值对,并且是完全可选的,他们包括:
recurse => count(default:MAX_RECURSE)
是否是递归请求,如重定向,认证和其他重试等等,如何做
只有重定向到http和https URL是支持的,当常用的重定向格式是被处理整个在模块里,
一些请求使用额外的URI 模块。如果它是需要的但是缺少了, 那么请求会失败
headers => hashref
请求头使用, 当前的,http_request 可能提供它自己的主机,Content-Length:, Connection: and Cookie:
和Cookie: headers 会提供默认值
timeout => $seconds
超时用于各种阶段,每个连接尝试会reset timeout, 会读或者写activity,
即不是整体超时 默认是5分钟
proxy => [host,port[, $scheme]] or undef
使用给定的http proxy 用于所有的请求, 或者没有proxy 如果undef 被使用
$scheme 必须是missing或者必须是http
如果没有指定,默认的proxy 会被使用
当前,你的proxy 需要认证,你需要指定一个相应的”Proxy-Authorization” header
在每个请求里。
body => $string
请求体, 通常是空的,会被发送( 这个模板的将来的版本可能提供更多的选项)
cookie_jar => $hash_ref
传递这个参数启用 cookie-processing, 松散的基于原netscape 规范
$hash_ref 必须是(初始是空的) hash 引用 ,会自动升级。
它是可能保存cookie jar 到持久的存储像JSON或者可储存的。
查看 AnyEvent::HTTP::cookie_jar_expire 函数如果你希望删除过期的
或者只有session的cookies
注意 这个cookie 实现不是完整的,如果你需要完整的cookie 管理器
你需要自己做。cookie_jar 意味着得到当前工作站点的很多的cookie.
cookie是一耳光灾难,不要使用它们,除非需要。
当cookie 处理被启用, Cookie: and Set-Cookie: headers 会被设置和处理通过这个模块。
否则,他们会保持不变。
tls_ctx => scheme|tls_ctx
指定 AnyEvent::TLS 上下文 被用于https连接,
这个参数遵循相同的规则作为tls_ctx 参数给 AnyEvent::Handle,
但是额外的,两个字符串低和高可以被指定.
session => $string
这个模块可以重用连接给相同的主机, 有时(例如,当使用TLS),
你不需要重用连接从其他的session .
例子:做一个简单的HTTP GET 请求对于 http://www.nethype.de/
打印响应的body.
use AnyEvent::HTTP;
my $cv = AnyEvent->condvar;
http_request GET => “http://www.nethype.de/“, sub {
my (body,hdr) = @_;
print “body\n”;
};cv->recv();
use AnyEvent::HTTP;
my $cv = AnyEvent->condvar;
http_request
HEAD => “https://zjcap.cn“,
##代表请求头
#headers => { “user-agent” => “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0” },
headers => { “user-agent” => “MySearchClient 1.0” },
timeout => 30,
sub {
my (body,hdr) = @_;
use Data::Dumper;
##打印响应头
print Dumper hdr;
}
;cv->recv();
10.171.246.184 - - [22/Apr/2016:13:50:20 +0800] “HEAD / HTTP/1.1” 200 0 “https://www.zjcap.cn/” “MySearchClient 1.0”
AnyEvent::HTTP 介绍的更多相关文章
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- ExtJS 4.2 介绍
本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...
随机推荐
- 假设将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
假设将synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...
- Google Maps 学习笔记(三)
1.GPolyline折线对象和GPolygon多边形对象 html标签中必须包含v="urn:schemas-microsoft--com:vml"的命名空间 <html ...
- 关于js封装框架类库之属性操作
在对DOM对象操作时,往往都要涉及到其属性的操作,为了提高开发效率,同时兼顾浏览器的性能,在这简单的封装了几个常见的属性.因为是模块化,在这只是引入了部分代码,其他代码在前几篇模块封装中有写.如有不足 ...
- ubuntu 中 ThinkPHP 上传文件无法得到文件名
在 419-424 行.
- js页面跳转 和 js打开新窗口 方法
js页面跳转 和 js打开新窗口 方法 第一种: 第二种: 第三种: 第四种: 第五种: 1.在原来的窗体中直接跳转用 window.location.href="你所要跳转的页面" ...
- 磁盘性能,你可能不知道的IOPS计算方法
每个I/O 请求到磁盘都需要若干时间.主要是因为磁盘的盘边必须旋转,机头必须寻道.磁盘的旋转常常被称为”rotational delay”(RD),机头的移动称为”disk seek”(DS).一个I ...
- PHP CI框架最近学到的内容
CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...
- React使用笔记(3)-React Event Listener
Date: 2015-11-28 12:18 Category: Web Tags: JavaScript Author: 刘理想 [toc] 1. 构造基本结构 首先,我们先创建一个按钮,一个输入框 ...
- SVN 在 linux 下的配置
0.服务器主机需要打开websharing: sudo su (进入root,需要输入密码) apachectl start (没有反应即打开成功) 1.建立想要保存软件仓库的目录 最好在/users ...
- C# 读书笔记之访问虚方法、重写方法和隐藏方法
C#允许派生类中的方法与基类中方法具有相同的签名:基类中使用关键字virtual定义虚方法:然后派生类中使用关键字override来重写方法,或使用关键字new来覆盖方法(隐藏方法). 重写方法用相同 ...