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 介绍的更多相关文章

  1. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  4. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  5. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  6. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  7. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  8. HTML5 介绍

    本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...

  9. ExtJS 4.2 介绍

    本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...

随机推荐

  1. java载入XML文件并解析xml

    import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentExce ...

  2. ubuntu之iptables

    1.更新iptables并立即生效: a.保存当前设置:iptables-save > /etc/iptables.up.rules b.修改iptables规则: 例如: -I INPUT - ...

  3. 经典mssql语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  4. API和DLL

    API API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用 ...

  5. iOS 用UISearchDisplayController实现查找功能

    UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用 示例代码如下: // // WKRootViewController ...

  6. Android应用开发基础篇(15)-----URL(获取指定网址里的图片)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/10/2389190.html 一.概述 URL,说白了就是一个网络地址(网址),通常一个网址里包 ...

  7. ftpclient卡死问题

    ftpclient在调用retrieveFileStream(String remote)之后,返回inputstream,如果不想关闭ftp,继续读取其他文件. 一定要先关闭inputstream, ...

  8. C语言实现约瑟夫环讨论

    [问题描述]     约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针 ...

  9. Firefox 备份

    参考http://mozilla.com.cn/post/32327/ 火狐的地址栏中输入about:support点击“打开所在文件夹”按钮,会弹出一个资源管理器,并且定位到你当前的Profile文 ...

  10. ajax Session失效如何跳转到登录页面

    在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截):一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采 ...