zoukankan      html  css  js  c++  java
  • 阿里云 内容安全 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 GMT');
    
    
    
    // 请求签名
    $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
    ";
        $source .= "application/json
    ";
        $source .= "
    ";
        $source .= "application/json;charset=utf-8
    ";
        $source .= $signDate."
    ";
        $source .= "x-acs-region-id:cn-shanghai
    ";
        $source .= "x-acs-signature-method:HMAC-SHA1
    ";
        $source .= "x-acs-signature-version:1.0
    ";
        $source .= "x-acs-version:2018-05-09
    ";
        $source .= $apiUrl;
        return base64_encode(hash_hmac('sha1', $source, $accessSecret, true));
    
    }
    
    
    // 发送post请求
    function queryRequest($requestUrl, $requestData, $header)
    {
        $client = new GuzzleHttpClient();
        $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", ...}'
    }

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

  • 相关阅读:
    百度brpc 压测工具rpc_press解析
    Reactor反应器模式 (epoll)
    hive和hbase的区别
    Hive和HBase
    入门HBase,看这一篇就够了
    Docker保存修改后的镜像
    怎样将本地文件上传到docker容器
    Docker 安装tomcat访问空白页问题解决办法
    Centos中查看系统信息的常用命令
    Docker 镜像加速
  • 原文地址:https://www.cnblogs.com/y734290209/p/13920089.html
Copyright © 2011-2022 走看看