这两天在搞阿里云 内容安全这个 自动检测 文字和图片是否违规 的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", ...}' }
这里的案例是文本检测的 图片检测除了个别参数其他完全相同