aliyun / aliyun-openapi-php-sdk

[Abandoned] Open API SDK for PHP developers
Other
606 stars 806 forks source link

oss视频内容安全检测的一个bug #101

Closed mouseinsnow closed 5 years ago

mouseinsnow commented 5 years ago

使用产品:内容安全检测(视频审核) API :/green/video/asyncscan

使用示例代码 public static function checkPorn($arr, $callback = '') { $iClientProfile = DefaultProfile::getProfile ( "cn-shanghai", "LTAIq7Sq5A0PPeOv", self::OSS_ACCESS_KEY ); DefaultProfile::addEndpoint ( "cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com" ); $client = new DefaultAcsClient ( $iClientProfile ); $request = new Green\VideoASyncScanRequest (); $request->setMethod ( "POST" ); $request->setAcceptFormat ( "JSON" ); // TODO 添加clientinfo $request->setClientInfo ( json_encode ( array ( 'userId' => 10000 ) ) ); // 计费按照该处传递的场景进行 // 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算 // 例如:检测2个视频,场景传递porn,terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算//本地文件先进行上传,然后进行检测 $params = array ( "scenes" => array ( "porn" ) ); if (! empty ( $callback )) { $params ['callback'] = $callback; $params ['seed'] = time (); } $params ['tasks'] = array (); foreach ( $arr as $tmp ) { $params ['tasks'] [] = array ( 'dataId' => $tmp ['dataId'], 'url' => $tmp ['url'] ); } $request->setContent ( json_encode ( $params ) ); try { $response = $client->getAcsResponse ( $request ); print_r ( $response ); if (200 == $response->code) { $taskResults = $response->data; foreach ( $taskResults as $taskResult ) { if (200 == $taskResult->code) { $taskId = $taskResult->taskId; // 将taskId保存下来,间隔一段时间来轮询结果。具体请参照VideoAsyncScanResultsRequest接口说明 print_r ( $taskId ); } else { print_r ( "task process fail:" + $response->code ); } } } else { print_r ( "detect not success. code:" + $response->code ); } } catch ( Exception $e ) { print_r ( $e ); } } 问题描述: 上面代码TODO下面的那行代码是关键,加入clientinfo之后,访问会报400错误,错误信息:Request url is invalid, Illegal character in query at index 76 导致这个bug的原因是在生成请求url的时候,没有将请求参数进行urlencode,工单提交过该问题,贵公司说检查没有问题。我进行了核实,发现确实存在bug,因此在此给提交一下。 具体sdk代码位置如下:

文件夹:aliyun-php-sdk-core 文件名:RoaAcsRequest.php 方法名:composeUrl 行数:93行 $queryString = $this->buildQueryString($uri); 这个地方查询字符串,生成之后签名的时候使用了,在101行,也用来了做拼接工作。所以在签名的时候不能urlencode。而拼接的时候,是需要使用urlencode字符串才能正常访问api的。

这里是访问所有api的通用接口,也是公共参数,以此是否可以认为其他api访问,加入clientinfo参数就会出现报错。

如有问题可以联系我进行讨论 电话:18616555207 钉钉:18616555207 微信:18616555207 qq:1480637355

ghost commented 5 years ago

使用产品:内容安全检测(视频审核) API :/green/video/asyncscan

使用示例代码 public static function checkPorn($arr, $callback = '') { $iClientProfile = DefaultProfile::getProfile ( "cn-shanghai", "LTAIq7Sq5A0PPeOv", self::OSS_ACCESS_KEY ); DefaultProfile::addEndpoint ( "cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com" ); $client = new DefaultAcsClient ( $iClientProfile ); $request = new Green\VideoASyncScanRequest (); $request->setMethod ( "POST" ); $request->setAcceptFormat ( "JSON" ); // TODO 添加clientinfo $request->setClientInfo ( json_encode ( array ( 'userId' => 10000 ) ) ); // 计费按照该处传递的场景进行 // 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算 // 例如:检测2个视频,场景传递porn,terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算//本地文件先进行上传,然后进行检测 $params = array ( "scenes" => array ( "porn" ) ); if (! empty ( $callback )) { $params ['callback'] = $callback; $params ['seed'] = time (); } $params ['tasks'] = array (); foreach ( $arr as $tmp ) { $params ['tasks'] [] = array ( 'dataId' => $tmp ['dataId'], 'url' => $tmp ['url'] ); } $request->setContent ( json_encode ( $params ) ); try { $response = $client->getAcsResponse ( $request ); print_r ( $response ); if (200 == $response->code) { $taskResults = $response->data; foreach ( $taskResults as $taskResult ) { if (200 == $taskResult->code) { $taskId = $taskResult->taskId; // 将taskId保存下来,间隔一段时间来轮询结果。具体请参照VideoAsyncScanResultsRequest接口说明 print_r ( $taskId ); } else { print_r ( "task process fail:" + $response->code ); } } } else { print_r ( "detect not success. code:" + $response->code ); } } catch ( Exception $e ) { print_r ( $e ); } } 问题描述: 上面代码TODO下面的那行代码是关键,加入clientinfo之后,访问会报400错误,错误信息:Request url is invalid, Illegal character in query at index 76 导致这个bug的原因是在生成请求url的时候,没有将请求参数进行urlencode,工单提交过该问题,贵公司说检查没有问题。我进行了核实,发现确实存在bug,因此在此给提交一下。 具体sdk代码位置如下:

文件夹:aliyun-php-sdk-core 文件名:RoaAcsRequest.php 方法名:composeUrl 行数:93行 $queryString = $this->buildQueryString($uri); 这个地方查询字符串,生成之后签名的时候使用了,在101行,也用来了做拼接工作。所以在签名的时候不能urlencode。而拼接的时候,是需要使用urlencode字符串才能正常访问api的。

这里是访问所有api的通用接口,也是公共参数,以此是否可以认为其他api访问,加入clientinfo参数就会出现报错。

如有问题可以联系我进行讨论 电话:18616555207 钉钉:18616555207 微信:18616555207 qq:1480637355

已收到,我们会尽快处理。

ghost commented 5 years ago

如钉钉沟通,此issue将被关闭。