文档章节

清阿里CDN缓存——py

perofu
 perofu
发布于 2017/06/27 15:59
字数 535
阅读 126
收藏 0

1、accesskey配置文件:

[root@58 cdn]#cat aliyun.ini

[Credentials]
accesskeyid = xxxxx
accesskeysecret =  xxxxx

2、py脚本:

【res = urllib.quote(str.decode(sys.stdin.encoding).encode('utf8'), '')】

res = urllib.quote(str.encode('utf8'), '')

        阿里给的脚本,是第一句,执行脚本是没问题的,但是在django和shell里面,就报【TypeError: decode() argument 1 must be string, not None

        之后换成第二句,就搞定了。

[root@58 cdn]#cat cdn.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
#
#/data/cdn/cdn.py Action=RefreshObjectCaches ObjectType=File ObjectPath=http://app.perofu.com/perofu_v1.apk

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

import os
import urllib, urllib2
import base64
import hmac
import hashlib
from hashlib import sha1
import time
import uuid
import json
from optparse import OptionParser
import ConfigParser
import traceback

access_key_id = '';
access_key_secret = '';
cdn_server_address = 'https://cdn.aliyuncs.com'
CONFIGFILE = '/data/cdn/aliyun.ini'
CONFIGSECTION = 'Credentials'
cmdlist = '''
接口说明请参照pdf文档
'''

def percent_encode(str):
    #print str,type(str)
    #res = urllib.quote(str.decode(sys.stdin.encoding).encode('utf8'), '')
    res = urllib.quote(str.encode('utf8'), '')
    res = res.replace('+', '%20')
    res = res.replace('*', '%2A')
    res = res.replace('%7E', '~')
    return res

def compute_signature(parameters, access_key_secret):
    sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])

    canonicalizedQueryString = ''
    for (k,v) in sortedParameters:
        canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)

    stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:])

    h = hmac.new(access_key_secret + "&", stringToSign, sha1)
    signature = base64.encodestring(h.digest()).strip()
    return signature

def compose_url(user_params):
    timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

    parameters = { \
            'Format'        : 'JSON', \
            'Version'       : '2014-11-11', \
            'AccessKeyId'   : access_key_id, \
            'SignatureVersion'  : '1.0', \
            'SignatureMethod'   : 'HMAC-SHA1', \
            'SignatureNonce'    : str(uuid.uuid1()), \
            'TimeStamp'         : timestamp, \
    }

    for key in user_params.keys():
        parameters[key] = user_params[key]

    signature = compute_signature(parameters, access_key_secret)
    parameters['Signature'] = signature
    url = cdn_server_address + "/?" + urllib.urlencode(parameters)
    return url

def make_request(user_params, quiet=False):
    url = compose_url(user_params)
    print url
def configure_accesskeypair(args, options):
    if options.accesskeyid is None or options.accesskeysecret is None:
        print("config miss parameters, use --id=[accesskeyid] --secret=[accesskeysecret]")
        sys.exit(1)
    config = ConfigParser.RawConfigParser()
    config.add_section(CONFIGSECTION)
    config.set(CONFIGSECTION, 'accesskeyid', options.accesskeyid)
    config.set(CONFIGSECTION, 'accesskeysecret', options.accesskeysecret)
    cfgfile = open(CONFIGFILE, 'w+')
    config.write(cfgfile)
    cfgfile.close()

def setup_credentials():
    config = ConfigParser.ConfigParser()
    try:
        config.read(CONFIGFILE)
        global access_key_id
        global access_key_secret
        access_key_id = config.get(CONFIGSECTION, 'accesskeyid')
        access_key_secret = config.get(CONFIGSECTION, 'accesskeysecret')
    except Exception, e:
                print traceback.format_exc()
                print("can't get access key pair, use config --id=[accesskeyid] --secret=[accesskeysecret] to setup")
                sys.exit(1)

 

if __name__ == '__main__':
    parser = OptionParser("%s Action=action Param1=Value1 Param2=Value2\n" % sys.argv[0])
    parser.add_option("-i", "--id", dest="accesskeyid", help="specify access key id")
    parser.add_option("-s", "--secret", dest="accesskeysecret", help="specify access key secret")

    (options, args) = parser.parse_args()
    if len(args) < 1:
                parser.print_help()
                sys.exit(0)

    if args[0] == 'help':
                print cmdlist
                sys.exit(0)
    if args[0] != 'config':
                setup_credentials()
    else: #it's a configure id/secret command
        configure_accesskeypair(args, options)
        sys.exit(0)

    user_params = {}
    idx = 1
    if not sys.argv[1].lower().startswith('action='):
        user_params['action'] = sys.argv[1]
        idx = 2

    for arg in sys.argv[idx:]:
        try:
            key, value = arg.split('=')
            user_params[key.strip()] = value
        except ValueError, e:
            print(e.read().strip())
            raise SystemExit(e)
    make_request(user_params)

 

 

3、生成URL:

[root@58 cdn]#python cdn.py  Action=RefreshObjectCaches  ObjectType=File  ObjectPath=http://app.perofu.com/perofu_v1.apk

4、清缓存:

    使用curl 访问下第三步生成的url,即可。可在阿里后台页面看到。

 

© 著作权归作者所有

perofu
粉丝 129
博文 163
码字总数 132277
作品 0
广州
系统管理员
私信 提问
CDN价格下调25%,阿里云再次释放技术红利

云计算的本质是普惠科技,规模越大,成本就越低。依托阿里云快速迭代的技术和与日俱增的规模效应,2017年11月22日云栖大会·广东分会上,阿里云重磅宣布CDN产品已实行全线降价,降幅高达25%...

imgxr
2018/03/01
0
0
阿里云章文嵩:以“极速CDN”支持互联网+创新创业

5月22日,全球领先的云计算厂商阿里云宣布下调其拳头产品“极速CDN”的价格,降幅达21.2%。调整后的价格对比传统CDN厂商价格接近“腰斩”。阿里云计算CTO章文嵩表示,本次价格调整得益于规模...

阿里云官方博客
2015/05/25
198
0
价值888元的wordpress性能优化方案 全面提升wordpress打开速度

接触wordpress也些年头了,wordpress建站非常好,性能好、主题多,但是唯一诟病的就是wordpress打开速度慢,造成wordpress访问速度慢的原因有很多,比如字体、表情emoji、插件、主题等因素。...

光山居士
2018/11/02
0
0
阿里云OSS跨域规则配置后不生效的原因

OSS跨域资源共享(CORS)配置项详解:https://help.aliyun.com/documentdetail/44199.html 问题描述: 我通过nginx反向代理了OSS域名后,通过浏览器访问提示请求头被拒绝,如下图 我的OSS跨域...

qianghong000
2018/06/29
0
0
一口气加入三大顶级组织,阿里云参与全球音视频编解码标准制定

近日,国内最大的云服务商阿里云正式加入三大顶级视频标准组织——AVS、JVET、AOM,未来,将与全球视频编码公司和专家参与音视频编解码等标准的制定。加入三大标准组织后,阿里云还将通过在视...

阿里云头条
2018/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部