标题：FetchURL
简介
FetchURL是SAE为开发者提供的分布式网页抓取服务，用来同步的抓取http页面，FetchURL针对国内的网络的做了优化，内部有调度系统，尽可能保证用户快速的抓取到目标页面 [1]
特别说明：SAE已经完全兼容cURL模块（内部用FetchURL实现），所以用户可以使用cURL*函数进行HTTP请求，兼容用户以往的使用习惯，使用户的学习成本降为零。所以我们推荐用户使用cURL*函数，以下关于FetchURL的文档仅供老用户参考。
。在SAE上使用FetchURL非常简单，只需要调用sae_std_lib中的几个简单的函数即可。但需要特别注意的是，为了平台安全性，SAE对FetchURL做了一些限制：
http连接超时<=5秒
send超时<=15秒
read超时<=20秒
http header禁用项：Content-Length、Vary、Via、X-Forwarded-For、FetchUrl、AccessKey、TimeStamp、Signature、AllowTruncated、ConnectTimeout、SendTimeout、ReadTimeout
另外，SAE规定FetchURL的user-agent默认包含SAE/fetchurl-accesskey，其中accesskey是用户的accesskey，用户可以自行添加 user-agent。Referer用户也可以自行定义。应用场景FetchURL适用的场景主要有：
1、抓取http资源
2、发送http rest请求
3、FetchURL支持https，并且支持重定向服务限制与配额SAE设置服务限制和配额的目的是为了防止个别用户攻击和滥用,从而在公有云计算平台上保证绝大多数开发者的正常使用.
1、服务限制和配额设定是在门户网站新浪自身长期运维的基础上经过严格计算得出的，所以正常使用一般不会出现问题。经过SAE 实际统计，99%的应用不会受到任何影响
2、当您发现您的某项服务超过限制或者超配时，请先阅读相关文档确认限制和配额的具体数值，再检查自己的程序是否存在使用不当的情况，如果仍然解决不了，可以和SAE官方联系.服务限制connect_timeout5秒
send_timeout15秒
read_timeout20秒
抓取文件大小8MB
禁用头，这些头用户无法修改Content- Length、Vary、Via、X-Forwarded-For、FetchUrl、AccessKey、TimeStamp、 Signature、AllowTruncated、ConnectTimeout、SendTimeout、ReadTimeout分钟配额运行在SAE上的应用(App)将会消耗平台资源，为保证各App不互相影响，我们引入了*分钟配额*的概念，即：在每分钟内每个应用的各个服务所消耗 的 资源的速度。比如，当平台中的某个应用的MySQLl服务一分钟内累计请求数达到10万，或者流出宽带超过200M，我们将会立即禁掉该应用的MySQL 服务，禁用五分钟后会自动恢复，避免影响到SAE平台的稳定性。服务因为超过“分钟配额”而被禁用时，会在“服务状态”看到该服务被禁用的原因是：OverMinuteQuota
服务请求数cpu时间流入带宽流出带宽
Fetchurl100,000NA200MB200MB
常见问题
SAE平台出口IP：
220.181.129.126
220.181.129.121
220.181.136.229
220.181.129.93
220.181.129.102
220.181.129.117
220.181.129.90
220.181.136.230
http接口方需要IP授权可以进行相应的设置。
PHP使用指南
抓取页面$f = new SaeFetchurl();
$content = $f->fetch('http://……');发起POST请求$f = new SaeFetchurl();
$f->setMethod('post');
$f->setPostData( array('name'=> 'easychen' , 'email' => 'easychen@gmail_com' , 'file' => '文件的二进制内容') );
$ret = $f->fetch('http://……');
//抓取失败时输出错误码和错误信息
if ($ret === false)
var_dump($f->errno(), $f->errmsg());错误码参考errno: 0 成功
errno: 600 fetchurl 服务内部错误
errno: 601 accesskey 不存在
errno: 602 认证错误，可能是secretkey错误
errno: 603 超出fetchurl的使用配额
errno: 604 REST 协议错误，相关的header不存在或其它错误，建议使用SAE提供的fetch_url函数
errno: 605 请求的URI格式不合法
errno: 606 请求的URI，服务器不可达法
errno: 607 请求的扩展服务尚未开启
Java调用方式
如何启用服务
使用FetchURL服务无需额外启动服务操作，参见文档API调用即可。
此外为了保障平台安全性，SAE对FetchURL做了以下限制：
http连接超时<=5秒
send超时<=15秒
read超时<=20秒
http header禁用项：Content-Length、Host、Vary、Via、X-Forwarded-For、FetchUrl、AccessKey、TimeStamp、Signature、 AllowTruncated、ConnectTimeout、SendTimeout、ReadTimeout
另外如果抓取的url内包含中文，需要对中文进行转码。本地环境使用本地环境使用httpclient4.x模拟Fetchurl服务，所以在本地使用Fetchurl服务无需额外配置，仅需将相关jar包放入classpath中即可。使用范例Fetchurl服务的操作都封装在SaeFetchurl类中，下面给出抓取网页和发送请求例子：抓取网页SaeFetchurl fetchUrl = new SaeFetchurl();
String content = fetchUrl.fetch("http://……");发送请求SaeFetchurl fetchUrl = new SaeFetchurl();
// 设置请求的方法(POST/GET/PUT... )
fetchUrl.setMethod("post");
//设置POST方法的数据
Map maps = new HashMap();
maps.put("name1","value1");
maps.put("name2","value2");
fetchUrl.setPostData(maps);
// 当请求页面是转向页时,是否允许跳转,SAE最大支持5次跳转(默认允许跳转)
fetchUrl.setAllowRedirect(true);
//添加cookie数据
fetchUrl.setCookie("key", "value");
/*
* 是否允许截断，默认为不允许 如果设置为true,当发送数据超过允许大小时,自动截取符合大小的部分;
* 如果设置为false,当发送数据超过允许大小时,直接返回false
*/
fetchUrl.setAllowTrunc(true);
//设置读取超时时间,此时间必须小于SAE系统设置的时间,否则以SAE系统设置为准（默认为60秒）
fetchUrl.setReadTimeout(20);
//设置发送超时时间,此时间必须小于SAE系统设置的时间,否则以SAE系统设置为准（默认为20秒）
fetchUrl.setSendTimeout(10);
//设置HTTP认证用户名密码
fetchUrl.setHttpAuth("user", "passwd");
//抓取url并返回响应体内容
String result = fetchUrl.fetch("http://……");
//返回HTTP状态码
int stat=fetchUrl.getHttpCode();
//返回网页内容
String body=fetchUrl.body();
//返回数据的响应头信息
fetchUrl.responseHeaders();
//返回错误码
fetchUrl.getErrno();
//返回错误信息
fetchUrl.getErrmsg();
//将对象的数据重新初始化,用于多次重用一个SaeFetchurl对象
fetchUrl.clean();
错误输出和错误码
errno: 0 成功
errno: 600 fetchurl 服务内部错误
errno: 601 accesskey 不存在
errno: 602 认证错误，可能是secretkey错误
errno: 603 超出fetchurl的使用配额
errno: 604 REST 协议错误，相关的header不存在或其它错误
errno: 605 请求的URI格式不合法
errno: 606 请求的URI，服务器不可达