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. Primefaces 中e.offset(...)问题的处理

    问题 在使用Primefaces构建的页面中,原来好好的页面莫名奇异的出现下拉框不能显示数据且点击没有反应的情况.后来通过firefox发现其JS抛出了一个e.offset(...)错误 解决方法 经 ...

  2. BZOJ 1257 余数之和sum(分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46954 题意:f(n, k)=k mod 1 + k mod 2 ...

  3. Problem E: Product

    Problem E: ProductTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submit][Status][Web Bo ...

  4. ThinkPHP第十四天(显示TRACE界面配置,关联模型详解定义)

    1.显示TRACE界面,首选需要在显示模版界面,$this->display(),然后需要在配置文件中配置 SHOW_PAGE_TRACE => true 2.关联模型使用 主表以user ...

  5. virtualbox 中安装win7虚拟机

    下载了win7镜像文件后,在virtualbox中装了几次都提示 windows faied to start,后来在网上找了些解决办法,在这记录下,免得下次又忘了 创建新的虚拟机: 1.安装virt ...

  6. 关于yield创建协程的理解

    先上利于理解的代码: #coding:utf-8 def consumer(): c_r = '' while 1: m = yield c_r if not m: return print(&quo ...

  7. iOS开发项目名称修改

    前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...

  8. DAO以及获取自动生成主键值

    package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...

  9. 别忘记给你博客的windows live writer配置 ping服务

    写好一篇博客,想要实现秒收.就必须要为文章添加ping服务. 这里介绍一下给wlw添加ping服务的办法. 点击工具---选项--ping服务器. 在右侧栏中加入以下地址 http://rpc.pin ...

  10. Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决

    首先,先解决第一个问题,我们使用VS2010开发的时候,调试的时候,中文打印出来都是乱码,这个问题很纠结. 如下图: CCLOG("cclog: 测试使用标签的自动换行和个别字体大写&quo ...