我正在使用lumen 5作为简单的api将数据传递到另一个Web应用程序。请求中的最终参数已加密。这已经好几个月了,但是今天我们遇到了麻烦,最终的加密参数以斜杠结尾:
https://xxx.yyy.zz/test/69UBiV8iBSDBQMumdaU/
后面的斜杠实际上是加密字符串的一部分...
在我的路线/web.php:
...
router->get('/test/{code:.*}', 'SoapController@show');
...
出于测试目的,我还在public / .htaccess中注释了这些行:
# Redirect Trailing Slashes If Not A Folder...
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} /(.*)/$
#RewriteRule ^ /%1 [R=301,L]
我可以确认网址保留了斜杠,但仍然出现错误:
at Application->Laravel\Lumen\Concerns\{closure}(8, 'Trying to get property of non-object',
'/var/www/html/test/app/Http/Controllers/SoapController.php', 133, array('testparam' =>
'**69UBiV8iBSDBQMumdaU**', 'response' => object(stdClass), 'xml' => '<package><diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-
diffgram-v1"/></package>', 'customer' => object(SimpleXMLElement)))
这告诉我该参数不带斜杠而被接收,并且未正确解密。
我的问题是:如何将斜杠保留为参数字符串的一部分,以便可以正确对其进行解密?
谢谢
/
是URL的一部分。因此,您必须切换到URL安全的加密或编码方法。这意味着从URL中的加密中删除+
,/
和=
。我认为您可以为此使用urlencode
和urldecode
(也许与base64_encode
和base64_decode
结合使用。
您还可以使用$request->url();
并通过使用/
分割preg_split("/\//", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
来自己解析。请注意,这仅在/
位于末尾时有效。我不知道您使用的是哪种加密。