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 ...
随机推荐
- 模式匹配-KMP算法
/***字符串匹配算法***/ #include<cstring> #include<iostream> using namespace std; #define OK 1 # ...
- 【玩转Ubuntu】04. Ubuntu上配置git环境
1. 使用PPA安装Git PPA,表示 Personal Package Archives,也就是个人软件包集. 有很多软件因为种种原因,不能进入官方的 Ubuntu 软件仓库. 为了方便 Ubun ...
- getDeclaredConstructor()与getConstructor的差别
首先看getDeclaredConstructor(Class<?>... parameterTypes) 这种方法会返回制定參数类型的全部构造器,包含public的和非public的, ...
- JAVA訪问URL
JAVA訪问URL: package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...
- HTML DOM访问
访问 HTML 元素(节点) 访问 HTML 元素等同于访问节点 您能够以不同的方式来访问 HTML 元素: 通过使用 getElementById() 方法 通过使用 getElementsByTa ...
- python wsgi
什么是wsgi? wsgi是一个web组件的接口防范,wsgi将web组件分为三类:web服务器,web中间件,web应用程序 wsgi基本处理模式为:wsgi Server -> wsgi m ...
- linux线程之pthread_join和pthread_detach
在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反 ...
- 1.语言概述-JavaScript权威指南笔记
上周三的时候交给老板目前的项目第一个迭代回顾会的总结.原本是以综述性的表述方式写的,交给他之后表示程序员不要长篇大论.总结要分为优点缺点期望等等块,每块列出条目,简明扼要的表达出来.这里也用这种风格. ...
- Ajax异步请求XMLHttpRequest对象Get请求
$(function () { $("#btnGetDate").click(function () { var xhr; //第一步:创建异步请求的核心的对象: if (XMLH ...
- Ubuntu_16.04 配置 Apache Rwrite URL 重写
Ubuntu Apache配置Rwrite URL重写 0. apache目录