阿里云 内容安全 api 爬坑 php

这两天在搞阿里云 内容安全这个 自动检测 文字和图片是否违规 的api

在签验的时候卡住了 官方文档地址:

https://help.aliyun.com/document_detail/70439.html?spm=a2c4g.11186623.6.684.6c4a1f82JyMqV1

测了下 官方的sdk 是可以的 然后就去翻了翻他sdk里面签验的姿势 

查阅后 官方文档中 Content-MD5 这个必填的参数 在 sdk 里面签验并没有使用 可能是在这个接口没用到 

相关需求的小伙伴可以先无视这个参数(在这个MD5上浪费了我不少时间一直提示MD5不正确) 

使用sdk 或使用sdk中的签验方法 可以顺利通过签验 如果遇到相同问题的小伙伴可以先参考sdk里面的签验 

相关代码:

<?php 
// http请求使用的是 GuzzleHttp 可以换成其他方式发起http请求
// composer require guzzlehttp/guzzle
require __DIR__.'/vendor/autoload.php';//引入自动加载的文件 

$accessKey = '替换成自己的key';
$accessSecret = '替换成自己的Secret';
$baseUrl = 'https://green.cn-shanghai.aliyuncs.com';
$apiUrl = '/green/text/scan';
$requestUrl = $baseUrl.$apiUrl;
$signDate = gmdate ('D, d M Y H:i:s \G\M\T');



// 请求签名
$signature = getSignature($accessSecret, $apiUrl, $signDate);
$requestData = requestData('非法关键字');
$header = getHeader($accessKey, $signature, $signDate);
queryRequest($requestUrl, $requestData, $header);

// 请求header头
function getHeader($accessKey, $signature, $signDate)
{
    return [
        'x-sdk-client' => 'php/2.0.0',
        'x-acs-version' => '2018-05-09',
        'Date' => $signDate,
        'Accept' => 'application/json',
        'x-acs-signature-method' => 'HMAC-SHA1',
        'x-acs-signature-version' => '1.0',
        'x-acs-region-id' => 'cn-shanghai',
        'Content-Type' => 'application/json;charset=utf-8',
        'Authorization' => 'acs'.' '.$accessKey.':'.$signature,
    ];
}

// 请求参数
function requestData($str)
{
    $arr = json_encode([
        "tasks" => [
            [
                'dataId' =>  uniqid(),
                'content' => $str
            ]
        ],
        "scenes" => ["antispam"]
    ]);

    return $arr;
}

// 生成签名
function getSignature($accessSecret, $apiUrl, $signDate)
{
    $source = "POST\n";
    $source .= "application/json\n";
    $source .= "\n";
    $source .= "application/json;charset=utf-8\n";
    $source .= $signDate."\n";
    $source .= "x-acs-region-id:cn-shanghai\n";
    $source .= "x-acs-signature-method:HMAC-SHA1\n";
    $source .= "x-acs-signature-version:1.0\n";
    $source .= "x-acs-version:2018-05-09\n";
    $source .= $apiUrl;
    return base64_encode(hash_hmac('sha1', $source, $accessSecret, true));

}


// 发送post请求
function queryRequest($requestUrl, $requestData, $header)
{
    $client = new \GuzzleHttp\Client();
    $response = $client->request('POST', $requestUrl, 
        [
            'json' => $requestData,
            'headers' => $header,
        ]);

    echo $response->getStatusCode(); // 200
    echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
    echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
}

 这里的案例是文本检测的 图片检测除了个别参数其他完全相同

posted @ 2020-11-03 14:29  苦行_僧  阅读(494)  评论(0编辑  收藏  举报