123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558 |
- <?php
- namespace OSS\Tests;
- use OSS\Http\RequestCore;
- use OSS\Credentials\Credentials;
- use OSS\Signer\SignerV1;
- use OSS\Signer\SignerV4;
- use OSS\Core\OssUtil;
- class SignerTest extends \PHPUnit\Framework\TestCase
- {
- public function testSignerV1Header()
- {
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com");
- $request->set_method("PUT");
- $bucket = "examplebucket";
- $object = "nelson";
- $request->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request->add_header("Content-Type", "text/html");
- $request->add_header("x-oss-meta-author", "alice");
- $request->add_header("x-oss-meta-magic", "abracadabra");
- $request->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signer = new SignerV1();
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request, $credentials, $signingOpt);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson";
- $this->assertEquals($signToString, $signingOpt['string_to_sign']);
- $this->assertEquals('OSS ak:kSHKmLxlyEAKtZPkJhG9bZb5k7M=', $request->request_headers['Authorization']);
- // case 2
- $request2 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl");
- $request2->set_method("PUT");
- $request2->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request2->add_header("Content-Type", "text/html");
- $request2->add_header("x-oss-meta-author", "alice");
- $request2->add_header("x-oss-meta-magic", "abracadabra");
- $request2->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request2->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signer = new SignerV1();
- $signingOpt2 = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request2, $credentials, $signingOpt2);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson?acl";
- $this->assertEquals($signToString, $signingOpt2['string_to_sign']);
- $this->assertEquals('OSS ak:/afkugFbmWDQ967j1vr6zygBLQk=', $request2->request_headers['Authorization']);
- // case 3 with non-signed query
- $request3 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl&non-signed-key=value");
- $request3->set_method("PUT");
- $request3->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request3->add_header("Content-Type", "text/html");
- $request3->add_header("x-oss-meta-author", "alice");
- $request3->add_header("x-oss-meta-magic", "abracadabra");
- $request3->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request3->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signingOpt3 = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request3, $credentials, $signingOpt3);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson?acl";
- $this->assertEquals($signToString, $signingOpt3['string_to_sign']);
- $this->assertEquals('OSS ak:/afkugFbmWDQ967j1vr6zygBLQk=', $request3->request_headers['Authorization']);
- }
- public function testSignerV1HeaderWithToken()
- {
- // case 1
- $credentials = new Credentials("ak", "sk", "token");
- $request = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com");
- $request->set_method("PUT");
- $bucket = "examplebucket";
- $object = "nelson";
- $request->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request->add_header("Content-Type", "text/html");
- $request->add_header("x-oss-meta-author", "alice");
- $request->add_header("x-oss-meta-magic", "abracadabra");
- $request->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signer = new SignerV1();
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request, $credentials, $signingOpt);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson";
- $this->assertEquals($signToString, $signingOpt['string_to_sign']);
- $this->assertEquals('OSS ak:H3PAlN3Vucn74tPVEqaQC4AnLwQ=', $request->request_headers['Authorization']);
- $this->assertEquals('token', $request->request_headers['x-oss-security-token']);
- // case 2
- $request2 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl");
- $request2->set_method("PUT");
- $request2->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request2->add_header("Content-Type", "text/html");
- $request2->add_header("x-oss-meta-author", "alice");
- $request2->add_header("x-oss-meta-magic", "abracadabra");
- $request2->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request2->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signer = new SignerV1();
- $signingOpt2 = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request2, $credentials, $signingOpt2);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson?acl";
- $this->assertEquals($signToString, $signingOpt2['string_to_sign']);
- $this->assertEquals("OSS ak:yeceHMAsgusDPCR979RJcLtd7RI=", $request2->request_headers['Authorization']);
- // case 3 with non-signed query
- $request3 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl&non-signed-key=value");
- $request3->set_method("PUT");
- $request3->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
- $request3->add_header("Content-Type", "text/html");
- $request3->add_header("x-oss-meta-author", "alice");
- $request3->add_header("x-oss-meta-magic", "abracadabra");
- $request3->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $request3->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
- $signingOpt3 = array(
- 'bucket' => $bucket,
- 'key' => $object,
- );
- $signer->sign($request3, $credentials, $signingOpt3);
- $signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson?acl";
- $this->assertEquals($signToString, $signingOpt3['string_to_sign']);
- $this->assertEquals('OSS ak:yeceHMAsgusDPCR979RJcLtd7RI=', $request2->request_headers['Authorization']);
- }
- public function testSignerV1Presign()
- {
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/key?versionId=versionId");
- $request->set_method("GET");
- $bucket = "bucket";
- $object = "key";
- $signer = new SignerV1();
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'expiration' => 1699807420,
- );
- $signer->presign($request, $credentials, $signingOpt);
- $parsed_url = parse_url($request->request_url);
- $queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
- $query = array();
- parse_str($queryString, $query);
- $this->assertEquals('1699807420', $query['Expires']);
- $this->assertEquals('ak', $query['OSSAccessKeyId']);
- $this->assertEquals('dcLTea+Yh9ApirQ8o8dOPqtvJXQ=', $query['Signature']);
- $this->assertEquals('versionId', $query['versionId']);
- $this->assertEquals('/key', $parsed_url['path']);
- }
- public function testSignerV1PresignWithToken()
- {
- $credentials = new Credentials("ak", "sk", "token");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/key%2B123?versionId=versionId");
- $request->set_method("GET");
- $bucket = "bucket";
- $object = "key+123";
- $signer = new SignerV1();
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'expiration' => 1699808204,
- );
- $signer->presign($request, $credentials, $signingOpt);
- $parsed_url = parse_url($request->request_url);
- $queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
- $query = array();
- parse_str($queryString, $query);
- $this->assertEquals('1699808204', $query['Expires']);
- $this->assertEquals('ak', $query['OSSAccessKeyId']);
- $this->assertEquals('jzKYRrM5y6Br0dRFPaTGOsbrDhY=', $query['Signature']);
- $this->assertEquals('versionId', $query['versionId']);
- $this->assertEquals('token', $query['security-token']);
- $this->assertEquals('/key%2B123', $parsed_url['path']);
- }
- public function testSignerV4Header()
- {
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "text/plain");
- $request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702743657));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- );
- $signer->sign($request, $credentials, $signingOpt);
- $authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,Signature=e21d18daa82167720f9b1047ae7e7f1ce7cb77a31e8203a7d5f4624fa0284afe";
- $this->assertEquals($authPat, $request->request_headers['Authorization']);
- }
- public function testSignerV4HeaderWithToken()
- {
- // case 1
- $credentials = new Credentials("ak", "sk", "token");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "text/plain");
- $request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702784856));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- );
- $signer->sign($request, $credentials, $signingOpt);
- $authPat = "OSS4-HMAC-SHA256 Credential=ak/20231217/cn-hangzhou/oss/aliyun_v4_request,Signature=b94a3f999cf85bcdc00d332fbd3734ba03e48382c36fa4d5af5df817395bd9ea";
- $this->assertEquals($authPat, $request->request_headers['Authorization']);
- }
- public function testSignerV4AdditionalHeaders()
- {
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "text/plain");
- $request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702747512));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- 'additionalHeaders' => array("ZAbc", "abc")
- );
- $signer->sign($request, $credentials, $signingOpt);
- $authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=abc;zabc,Signature=4a4183c187c07c8947db7620deb0a6b38d9fbdd34187b6dbaccb316fa251212f";
- $this->assertEquals($authPat, $request->request_headers['Authorization']);
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "text/plain");
- $request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702747512));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- 'additionalHeaders' => array("x-oss-no-exist", "ZAbc", "x-oss-head1", "abc")
- );
- $signer->sign($request, $credentials, $signingOpt);
- $authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=abc;zabc,Signature=4a4183c187c07c8947db7620deb0a6b38d9fbdd34187b6dbaccb316fa251212f";
- $this->assertEquals($authPat, $request->request_headers['Authorization']);
- }
- public function testSignerV4Presign()
- {
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "application/octet-stream");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702781677));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- 'expiration' => 1702782276,
- );
- $signer->presign($request, $credentials, $signingOpt);
- $parsed_url = parse_url($request->request_url);
- $queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
- $query = array();
- parse_str($queryString, $query);
- $this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
- $this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
- $this->assertEquals('599', $query['x-oss-expires']);
- $this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
- $this->assertEquals('a39966c61718be0d5b14e668088b3fa07601033f6518ac7b523100014269c0fe', $query['x-oss-signature']);
- $this->assertFalse(isset($query['x-oss-additional-headers']));
- }
- public function testSignerV4PresignWithToken()
- {
- // case 1
- $credentials = new Credentials("ak", "sk", "token");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "application/octet-stream");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702785388));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- 'expiration' => 1702785987,
- );
- $signer->presign($request, $credentials, $signingOpt);
- $parsed_url = parse_url($request->request_url);
- $queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
- $query = array();
- parse_str($queryString, $query);
- $this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
- $this->assertEquals('599', $query['x-oss-expires']);
- $this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
- $this->assertEquals('3817ac9d206cd6dfc90f1c09c00be45005602e55898f26f5ddb06d7892e1f8b5', $query['x-oss-signature']);
- $this->assertFalse(isset($query['x-oss-additional-headers']));
- //print($request->request_url);
- }
- public function testSignerV4PresignWithAdditionalHeaders()
- {
- // case 1
- $credentials = new Credentials("ak", "sk");
- $request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
- $request->set_method("PUT");
- $bucket = "bucket";
- $object = "1234+-/123/1.txt";
- $request->add_header("x-oss-head1", "value");
- $request->add_header("abc", "value");
- $request->add_header("ZAbc", "value");
- $request->add_header("XYZ", "value");
- $request->add_header("content-type", "application/octet-stream");
- $request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702783809));
- $signer = new SignerV4();
- $query = array();
- $query["param1"] = "value1";
- $query["+param1"] = "value3";
- $query["|param1"] = "value4";
- $query["+param2"] = "";
- $query["|param2"] = "";
- $query["param2"] = "";
- $parsed_url = parse_url($request->request_url);
- $parsed_url['query'] = OssUtil::toQueryString($query);;
- $request->request_url = OssUtil::unparseUrl($parsed_url);
- $signingOpt = array(
- 'bucket' => $bucket,
- 'key' => $object,
- 'region' => 'cn-hangzhou',
- 'product' => 'oss',
- 'expiration' => 1702784408,
- 'additionalHeaders' => array("ZAbc", "abc")
- );
- $signer->presign($request, $credentials, $signingOpt);
- $parsed_url = parse_url($request->request_url);
- $queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
- $query = array();
- parse_str($queryString, $query);
- $this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
- $this->assertEquals('20231217T033009Z', $query['x-oss-date']);
- $this->assertEquals('599', $query['x-oss-expires']);
- $this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
- $this->assertEquals('6bd984bfe531afb6db1f7550983a741b103a8c58e5e14f83ea474c2322dfa2b7', $query['x-oss-signature']);
- $this->assertEquals('abc;zabc', $query['x-oss-additional-headers']);
- }
- }
|