特别说明:
SAE目前已经完全兼容cURL模块(内部用FetchURL实现),所以用户可以使用curl*函数进行HTTP请求,兼容用户以往的使用习惯,使用户的学习成本降为零。所以我们推荐用户使用curl*函数,以下关于FetchURL的文档仅供老用户参考。
FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系 统,尽可能保证用户快速的抓取到目标页面。在SAE上使用FetchURL非常简单,只需要调用sae_std_lib中的几个简单的函数即可。但需要特 别注意的是,为了平台安全性,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
另外,SAE规定FetchURL的user-agent默认包含SAE/fetchurl-accesskey,其中accesskey是用户的accesskey,用户可以自行添加user-agent。Referer用户也可以自行定义。
FetchURL适用的场景主要有:
抓取http资源
发送http rest请求
FetchURL支持https,并且支持重定向
$f = new SaeFetchurl();
$content = $f->fetch(‘http://sina.cn’);
$f = new SaeFetchurl();
$f->setMethod(‘post’);
$f->setPostData( array(‘name’=> ‘easychen’ , ‘email’ => ‘easychen@gmail.com’ , ‘file’ => ‘文件的二进制内容’) );
$ret = $f->fetch(‘http://photo.sinaapp.com/save.php’);
//抓取失败时输出错误码和错误信息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,服务器不可达