shell 带签名请求,yii 处理带签名的请求

Posted ~~逍遥~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 带签名请求,yii 处理带签名的请求相关的知识,希望对你有一定的参考价值。

 

处理请求

class TestController extends Controller
{
    
    public function init()
    {
        if(!YII_ENV_DEV){
            throw  new ExitException(201,‘can not access not in dev mode‘);
        }
    }
    
    /**
     *
     */
    public function actionClientip()
    {
        if(YII_ENV_DEV){
            $request = Yii::$app->getRequest();
            $keyStr = ‘key_123‘;
            $timestamp = $request->get(‘timestamp‘);
            $sign = $request->get(‘sign‘);
            if(md5($timestamp.$keyStr) == $sign){
                $databaseIp = $request->getUserIP();
                // $databaseIp = ‘127.0.0.1‘;
                $conainer = new ContainerSaveForDynamicData();
                $dbComponetConfig = [
                    ‘class‘ => ‘yii\db\Connection‘,
                    ‘dsn‘ => ‘mysql:host=‘.$databaseIp.‘;port=3306;dbname=database1‘,
                    ‘username‘ => ‘username1‘,
                    ‘password‘ => ‘password1‘,
                    ‘charset‘ => ‘utf8‘,
                    ‘tablePrefix‘=>‘prefix_‘
                ];
                $conainer->setDataByKey(ContainerSaveForDynamicData::DB_COMPONENT_CONFIG,$dbComponetConfig);
                return ‘success‘;
            }
            return ‘fail‘;
        }
        else{
            return ‘fail,not in dev mode‘;
        }
    }
    
}

非标准路径缓存管理

use yii\helpers\FileHelper;
// $conainer = new \common\components\ContainerSaveForDynamicData();
// $conainer->getDataByKey(‘db4Dynamic‘);
// $conainer->setDataByKey(‘db4Dynamic‘,‘127.0.0.1‘);
class ContainerSaveForDynamicData
{
    
    const DB_COMPONENT_CONFIG = ‘dbComponetConfig‘;
    public $cacheFileSuffix = ‘.bin‘;
    public $cachePath = ‘./dynamic-data-cache‘;
    public $dirMode = 0775;
    public $keyPrefix = ‘‘;
    public $fileMode;
    
    public function __construct()
    {
        $this->cachePath = __DIR__.‘/../../dynamic-data-cache‘;
        if (!is_dir($this->cachePath)) {
            FileHelper::createDirectory($this->cachePath, $this->dirMode, true);
        }
    }
    
    /**
     * 指定键的值
     * @param unknown $key
     * @return boolean|unknown
     */
    public function getDataByKey($key)
    {
        $key = $this->buildKey($key);
        $cacheFile = $this->getCacheFile($key);
        if(!file_exists($cacheFile)){
            return false;
        }
        
        if (@filemtime($cacheFile) > time()) {
            $fp = @fopen($cacheFile, ‘r‘);
            if ($fp !== false) {
                @flock($fp, LOCK_SH);
                $cacheValue = @stream_get_contents($fp);
                @flock($fp, LOCK_UN);
                @fclose($fp);
                
                $cacheValue = unserialize($cacheValue);
                
                return $cacheValue;
            }
        }
        
        return false;
    }

    /**
     * 设置值
     */
    public function setDataByKey($key,$value,$duration=0)
    {
        $key = $this->buildKey($key);
        $cacheFile = $this->getCacheFile($key);
        
        $value = serialize($value);
        
        if (@file_put_contents($cacheFile, $value, LOCK_EX) !== false) {
            if ($this->fileMode !== null) {
                @chmod($cacheFile, $this->fileMode);
            }
            if ($duration <= 0) {
                $duration = 31536000; // 1 year
            }
            return @touch($cacheFile, $duration + time());
        } else {
            $error = error_get_last();
            return false;
        }
    }

    protected function buildKey($key)
    {
        $key = md5(json_encode($key));
        return $this->keyPrefix . $key;
    }
    
    /**
     * 缓存文件名称
     * @param unknown $key
     * @return string
     */
    protected function getCacheFile($key)
    {
        return $this->cachePath . DIRECTORY_SEPARATOR . $key . $this->cacheFileSuffix;
    }
}


从缓存中读取数据库配置

<?php

if(YII_ENV_DEV){
    $conainer = new ContainerSaveForDynamicData();
    if(($data = $conainer->getDataByKey(ContainerSaveForDynamicData::DB_COMPONENT_CONFIG)) != false){
        return $data;
    }
    else{
        return [
            ‘class‘ => ‘yii\db\Connection‘,
            ‘dsn‘ => ‘mysql:host=127.0.0.1;port=3306;dbname=database1‘,
            ‘username‘ => ‘username1‘,
            ‘password‘ => ‘password1‘,
            ‘charset‘ => ‘utf8‘,
            ‘tablePrefix‘=>‘prefix_‘
        ];
    }
    
}
else if(YII_ENV_TEST){
    return [
        ‘class‘ => ‘yii\db\Connection‘,
        ‘dsn‘ => ‘mysql:host=127.0.0.1;port=3306;dbname=database1‘,
        ‘username‘ => ‘username1‘,
        ‘password‘ => ‘password1‘,
        ‘charset‘ => ‘utf8‘,
        ‘tablePrefix‘=>‘prefix_‘
    ];
}
else if(YII_ENV_PROD){
    
}


定时请求

#!/bin/sh
export LANG=en_US.UTF-8
timestamp=`date "+%s"`

keystr="key_123"
pre_str=$timestamp$keystr
sign_str=$(echo -n $pre_str|md5sum|awk -F ‘ ‘ ‘{print $1}‘)
req_url_str="http://www.xxx.com/index.php?r=test/clientip&sign="$sign_str"×tamp="$timestamp
result_str=`curl -s --url $req_url_str`

echo $result_str >> /a/b/c/www.xxx.com/mytasks/logs/log_update_ip.log

 

以上是关于shell 带签名请求,yii 处理带签名的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Google Volley网络库发起带Header的HTTP请求

其他UTF-8带签名与不带签名

[接口测试]JMeter中的字符串加密处理

Python需要disconnect信号吗

请求处理方法签名

PowerShell代码签名:如何使用带密码保护的自签名证书?