关于下载SAE日志签名认证的方法——PHP版
之前需要下载SAE上的日志存入数据库,因此研究了下SAE的签名认证和日志下载。这个链接是SAE官方给出的API文档。https://www.sinacloud.com/doc/api.html#qian-ming-fang-fa,虽然讲的方法很清晰,但并不是很具体。然后Python版本的网上比比皆是,我这里不费过多笔墨,看他的官方文档也不困难。
下面的方法是获得SAE的签名认证:
public function getAuthorization($accesskey,$secretkey,$time,$uri)
{
$header = array(
'x-sae-timestamp' => $time,
'x-sae-accesskey' => strtolower($accesskey)
);
ksort($header);
$sae_header = array('GET',$uri);
foreach ($header as $key => $value) {
$sae_header[count($sae_header)] = $key.':'.$value;
}
$ret = implode(PHP_EOL, $sae_header);
$auth = 'SAEV1_HMAC_SHA256 '.base64_encode(hash_hmac('sha256',$ret,$secretkey,true));
return $auth;
}
代码解释:传入参数L:$accesskey,$secretkey,$time,$uri,先将所有x-sae-开头的http header(小写)按name排序后用冒号链接name和value,放在method、uri(包含query string,不要转义)后以换行符分隔拼接为签名原文字符串,再以Secretkey为密钥用hmac sha256计算哈希值(二进制),再经base64编码,前面加上”SAEV1_HMAC_SHA256 “,得到本次请求的认证签名,即Authorization字段。
获得签名认证之后还需要获得header,方法如下:
public function getheader($accesskey,$auth,$time)
{
return array(
'Host: g.sae.sina.com.cn',
'Accept: text/plain',
'x-sae-accesskey: '.$accesskey,
'x-sae-timestamp: '.$time,
'Authorization: '. $auth
);
} 得到header之后就非常简单了:可以直接发送请求来获取SAE的日志:
public function get($uri,$header){
$host = 'http://g.sae.sina.com.cn'.$uri;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 1);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
使用上面的方法在配合具体的下载要求就可以随意下载SAE上的日志了。
下面附上完整的代码实例,这只是按照我的要求下载的日志并且存入了数据库,仅供参考:
public function log()
{
//$uri = '/log/http/2016-08-03:2016-08-05/'.$_SERVER['HTTP_APPVERSION'].'3-access.log';
$date = date('Y-m-d',strtotime('-1 day'));
$time = time();
$acc = 'lwjljzn2wz';
$sec = '1hkzhw2y51wl2w1i21hl4miyj2yj44l5x1404l00';
$uri = '/log/http/'.$date.'/3-access.log?grep/3.dxever.applinzi.com.*POST|fields/ /1/2/5';
$uri_1 = '/log/http/'.$date.'/3-access.log?grep/3.dxever.applinzi.com.*POST|fields/"/2';
//$uri = '/log/http/2016-08-09/3-access.log?fields/ /1/2/3';
$g = D('godview');
$auth = $g->getAuthorization($acc,$sec,$time,$uri);
$header = $g->getheader($acc,$auth,$time);
$ret = $g->get($uri,$header);
$time_1 = time();
$auth_1 = $g->getAuthorization($acc,$sec,$time_1,$uri_1);
$header_1 = $g->getheader($acc,$auth_1,$time_1);
$ret_1 = $g->get($uri_1,$header_1);
$time_mom = date('Ymd',strtotime('-1 day'));
$data = explode("3.dxever.applinzi.com",$ret);
$data_1 = explode("POST ",$ret_1); unset($data_1[0]);
unset($data[0]);
foreach ($data as $k => $v)
{ preg_match_all('/\/index.php\/Area\/School\/GetSchoolComment\/token(.*) HTTP\/1.0/',$data_1["$k"],$token);
if ($token[1][0] != NULL) {
$log['user_id'] = $g->get_id($token[1][0]);
}else {
$log['user_id'] = NULL;
}
preg_match_all('/\/(.*) HTTP\/1.0/',$data_1["$k"],$url); preg_match_all('/((([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))\.){3}(([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))/',$v,$ip);
preg_match_all('/\/2016:(.*)/',$v,$ti);
// if ($url[1][0]==NULL) {
// // $url = 'a';
// preg_match_all('/GET (.*?) HTTP/',$v,$url);
// }
// preg_match_all('/Mozilla(.*)/',$v,$head);
// $area = explode(" ",$time);
$log['ip'] = $ip[0][0];
$log['url'] = $url[1][0];
$log['head'] = $head[0][0];
$log['area'] = $area[1];
// $time = $area[0];
// $t = explode(":",$time,2);
$log['time1'] = $time_mom;
$log['time2'] = str_replace(':','',$ti[1][0]);
// dump($log);
$sta = $g->save_log($log);
}
if($sta){
$this->response(returnSuccess(), 'json');
}else {
$this->response(returnWrong(), 'json');
} }
下面为用到的方法的全部整合:
public function getAuthorization($accesskey,$secretkey,$time,$uri)
{
$header = array(
'x-sae-timestamp' => $time,
'x-sae-accesskey' => strtolower($accesskey)
);
ksort($header);
$sae_header = array('GET',$uri);
foreach ($header as $key => $value) {
$sae_header[count($sae_header)] = $key.':'.$value;
}
$ret = implode(PHP_EOL, $sae_header);
$auth = 'SAEV1_HMAC_SHA256 '.base64_encode(hash_hmac('sha256',$ret,$secretkey,true));
return $auth;
} public function getheader($accesskey,$auth,$time)
{
return array(
'Host: g.sae.sina.com.cn',
'Accept: text/plain',
'x-sae-accesskey: '.$accesskey,
'x-sae-timestamp: '.$time,
'Authorization: '. $auth
);
} public function get($uri,$header){
$host = 'http://g.sae.sina.com.cn'.$uri;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 1);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
} public function save_log($log)
{
$a = M('log')->add($log);
return $a;
}
关于下载SAE日志签名认证的方法——PHP版的更多相关文章
- Let's Encrypt 免费通配 https 签名证书 安装方法2 ,安卓签名无法认证!
Let's Encrypt 免费通配 https 签名证书 安装方法 按照上文 配置完毕后你会发现 在pc浏览器中正常访问,在手机浏览器中无法认证 你只需要安装一个或多个中级证书 1.查看Nginx ...
- REST签名认证
139 开放平台与应用之间以REST协议进行通讯,为了保证通信的安全性,开放平台加入签名认证机制.应用一旦创建,系统生成唯一并且不公开的secretkey,只有应用的拥有者和开放平台知道.因此,当应用 ...
- php签名认证
一.概述 开年第一篇,该篇主要讲述了接口开发中,如何安全认证.如何用php签名认证. 二.说说历史 签名认证是什么?为什么要做签名认证?签名认证哪里会用到?no.no.no.....是不是,是不是,一 ...
- 火币网API文档——REST API 签名认证
安全认证 目前关于apikey申请和修改,请在“账户 - API管理”页面进行相关操作.其中AccessKey为API 访问密钥,SecretKey为用户对请求进行签名的密钥(仅申请时可见).Pro站 ...
- RESTful接口签名认证实现机制
RESTful接口 互联网发展至今,催生出了很多丰富多彩的应用,极大地调动了人们对这些应用的使用热情.但同时也为互联网应用带来了严峻的考验.具体体现在以下几个方面: 1. 部署方式的改变:当用 ...
- dll签名两种方法
以下两种签名方法,都是对csp.dll签名,都不是CA颁发的,且效果不同, 一:通过自建证书签名 下载windows sdk,成功安装后,包括makecert.exe, cert2spc.exe, p ...
- 日志分析方法概述 & Web日志挖掘分析的方法
日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核.各种应用服务器等等.日志的内容.规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志.其 ...
- 用PHP实现浏览器点击下载各种格式文档的方法详解【txt apk等等】
[[注:其他文件想设置成下载文件,和下面介绍的方法一致]] 由于现在的浏览器已经可以识别txt文档格式,如果只给txt文档做一个文字链接的话,点击后只是打开一个新窗口显示txt文件的内容,并不能实现点 ...
- Spring官网下载dist.zip的几种方法
Spring官网下载dist.zip的几种方法 Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包, ...
随机推荐
- php 中文切割字符串长度
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_ex ...
- Java 之 HTML
1.HTML a.定义:HTML指的是超文本标记语言 b.特点:HTML不是一种编程语言,而是一种标记语言 标记语言是一套标记标签 HTML使用标记标签来描述网页 c.HTML标签:①通常标签是成对出 ...
- Use Wireshark to capture loopback traffic without a loopback adapter (转)
Use Wireshark to capture loopback traffic without a loopback adapter If you’ve ever used Wireshark f ...
- Selenium2(java)启动常用浏览器 三
默认启动firefox浏览器 Webdriver driver = new FirefoxDriver(); 启动谷歌浏览器 配置chromedriver WebDriver driver; Syst ...
- [Angular Tutorial] 3-Components
在先前的步骤中,我们看到了一个控制器和一个模板如何一起工作来将一个静态的HTML文件转化为动态页面(view).一般说来,这在单页应用中一种非常常见的模式(在Angular应用中尤其是这样): ·客户 ...
- Python3基础 使用clear() 清空一个字典
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题. 1.如何快速获取CSV大文件的总行数? 办法一:直接获取文件内容 ...
- 环信 之 iOS 客户端集成三:基础功能
SDK中,大部分与网络有关的操作,都有三种方法: 同步方法 通过delegate回调的异步方法.要想能收到回调,必须要注册为:[[EaseMob sharedInstance].chatManager ...
- 在 AngularJS 中将 XML 转换为 JSON
在这篇文章中,我们将谈谈如何在Angular JS中将XML文件转换为JSON.大家都知道Angular JS是开发应用程序的JavaScript框架.所以基本上Angular JS期望得 到的响应 ...
- 模块划分--MVVM指南(课程学习)
实现流水化开发,需要使用“模块划分”的程序开发方式.如此,团队里的每个人负责某项\某几项特定的技术领域,在特定的技术领域更加专业.这样,每个人的效率更高.在专业的技能更熟练,更深入,也会提高队员的成就 ...