查询字符串参数的值不能包含'='分隔符 [英] the value of a query string parameter may not contain a '=' delimiter

查看:71
本文介绍了查询字符串参数的值不能包含'='分隔符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

现在我简化问题.

我尝试直接复制并粘贴查询以使用%3D而不是'='对其进行确认

I try to directly copy and paste the query to confrim it use %3D instead of '='

    var xhrSNS = Ti.Network.createHTTPClient({
        onload :function(e) {
            Ti.API.info("test Post query:" + JSON.stringify(e));
            Ti.API.info(this.responseText); 
        },
        onerror : function(e){
            Ti.API.debug("test Create PlatForm Endpoint registerPush error:" + e.error);
            Ti.API.info(this.responseText); 

        }       
    });

        getUrl = "http://sns.ap-northeast-1.amazonaws.com?AWSAccessKeyId=AAAAAAAAAAAAAAA&Action=CreatePlatformEndpoint&PlatformApplicationArn=arn%3Aaws%3Asns%3Aap-northeast-1%3A776188326341%3Aapp%2FGCM%2Fmyapp&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2016-04-03T15%3A05%3A51.465Z&Token=APA91bEiaB-902cRmwwgCwoqi2jRIJzzTIZNB7XduELuBKit_WF29tN5twrVW5t1BHpj07ARgwjzoc-I5xVur5K6I6ZQcnoErguUyi-VBHvuI5eY9HS4jq1J6KbIC05Etoe8indjpY9X&Version=2010-03-31&Signature=DzxQpP%2BcALS91C53eia6ZkBhxg3lQ32ctqiEmqKwwLA%3D";
        xhrSNS.open('GET',getUrl);
        xhrSNS.send();

请参阅getUrl的最后一个字母,它一定使用'%3D'.

Please see the last letter of getUrl, it surely use '%3D'.

但是收益是一样的.

有人抱怨句子中包含'='分隔符.

It makes a complaint that sentence include '=' delimiter.

[DEBUG] test Create PlatForm Endpoint registerPush error:400 : Bad Request
[INFO]  <ErrorResponse xmlns="http://webservices.amazon.com/AWSFault/2005-15-09">
[INFO]  <Error>
[INFO]  <Type>Sender</Type>
[INFO]  <Code>MalformedQueryString</Code>
[INFO]  <Message>AWSAccessKeyId=AAAAAAAAAAAAAAA&amp;Action=CreatePlatformEndpoint&amp;PlatformApplicationArn=arn%3Aaws%3Asns%3Aap-northeast-1%3A776188326341%3Aapp%2FGCM%2Fmyapp&amp;SignatureMethod=HmacSHA256&amp;SignatureVersion=2&amp;Timestamp=2016-04-03T15%3A05%3A51.465Z&amp;Token=APA91bEiaB-902cRmwwgCwoqi2jRIJzzTIZNB7XduELuBKit_WF29tN5twrVW5t1BHpj07ARgwjzoc-I5xVur5K6I6ZQcnoErguUyi-VBHvuI5eY9HS4jq1J6KbIC05Etoe8indjpY9X&amp;Version=2010-03-31&amp;Signature=DzxQpP%2BcALS91C53eia6ZkBhxg3lQ32ctqiEmqKwwLA= is not valid; the value of a query string parameter may not contain a '=' delimiter</Message>

-----------------------------添加到此处--------------- -

-----------------------------adding until here-----------------

我正在使用Amazon SNS API

I am using Amazon SNS API

我这样创建了url,使其在浏览器中也能很好地工作.

I made url like this it works well on browser.

http://sns.ap-northeast-1.amazonaws.com?AWSAccessKeyId=AAAAAAAAAAAAA&Action=CreatePlatformEndpoint&PlatformApplicationArn=arn%3Aaws%3Asns%3Aap-northeast-1%3A776188326341%3Aapp%2FGCM%2Fmyapp&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2016-04-01T21%3A06%3A29.861Z&Token=APA91bEiaB-902cRmwwgCwoqi2jRIJzzTIZNB7XduELuBKit_WF29tN5twrVW5t1BHpj07ARgwjzoc-I5xVur5K6I6ZQcnoErguUyi-VBHvuI5eY9HS4jq1J6KbIC05Etoe8indjpY9X&Version=2010-03-31&Signature=Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIKKekAI%3D

但是,如果我尝试从Android进行尝试.

However if I try from Android.

这将返回400个错误的请求.

This returns 400 bad request.

<ErrorResponse xmlns="http://webservices.amazon.com/AWSFault/2005-15-09">
<Error>
<Type>Sender</Type>
<Code>MalformedQueryString</Code>
<Message>AWSAccessKeyId=AAAAAAAAAAAAA&amp;Action=CreatePlatformEndpoint&amp;PlatformApplicationArn=arn%3Aaws%3Asns%3Aap-northeast-1%3A776188326341%3Aapp%2FGCM%2Fmyapp&amp;SignatureMethod=HmacSHA256&amp;SignatureVersion=2&amp;Timestamp=2016-04-01T21%3A06%3A29.861Z&amp;Token=APA91bEiaB-902cRmwwgCwoqi2jRIJzzTIZNB7XduELuBKit_WF29tN5twrVW5t1BHpj07ARgwjzoc-I5xVur5K6I6ZQcnoErguUyi-VBHvuI5eY9HS4jq1J6KbIC05Etoe8indjpY9X&amp;Version=2010-03-31&amp;Signature=Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIWUekAI=
 is not valid; the value of a query string parameter may not contain a '=' delimiter</Message>
</Error>
<RequestId>5b40d988-af34-577a-8839-96f04a217dec</RequestId>
</ErrorResponse>

我认为

查询字符串参数的值不能包含'='分隔符

the value of a query string parameter may not contain a '=' delimiter

是造成问题的原因,但我不知道如何解决.

is the cause of problem though, I cant figure out how to fix it.

相同的代码可在iPhone上使用.

The same code works on iPhone.

仅在android上不起作用.

it doesn't work only from android.

我通过此函数制作了URL字符串

I made URL strings from this function

var array = {
    PlatformApplicationArn : Ti.App.global.androidArn
};
awsObj = getSignature("CreatePlatformEndpoint",date,awsUrl,event.registrationId,array);
    var getUrl = "http://" + awsUrl + '?' + awsObj.str_para + "&Signature=" + awsObj.encodedString;
Ti.API.info('GETurl :' + getUrl);
xhrSNS.open('GET',getUrl);


function getSignature(action,date,awsUrl,token,array){
    Ti.include('/jssha/jssha256.js');

    var base = {
        Action:action,
        AWSAccessKeyId : Ti.App.global.awsAccessKey,
        SignatureMethod : "HmacSHA256",
        SignatureVersion :2,
        Token: token,
        Timestamp : date,
        Version : "2010-03-31",
    };
    para = arrayMerge(array,base);

    var para_array = [];

    for(var pname in para){
        para_array.push(pname + "=" + encodeURIComponent(para[pname]));
    }
    para_array.sort();

    var str_para = para_array.join('&');
    var str_signature = "GET" + "\n" + awsUrl + "\n" + "/" + "\n" + str_para;

    console.log("str_signature:" + str_signature);

    HMAC_SHA256_init(Ti.App.global.awsSecretKey);
    HMAC_SHA256_write(str_signature);
    var array_hash = HMAC_SHA256_finalize();

    var str_hash = "";
    for (var i = 0; i < array_hash.length; i++) {
        str_hash += String.fromCharCode(array_hash[i]);
    }

    var awsObj = new Object();
    awsObj.encodedString = encodeURIComponent(base64encode(str_hash));

    Ti.API.info("awsObj.encodedString:" + awsObj.encodedString); // I have confirmed encodedString is correct here.
    awsObj.str_para = str_para;
    return awsObj;
}

推荐答案

浏览器中的网址:Signature = Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIKKekAI%3D

URL in browser: Signature=Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIKKekAI%3D

Android中的URL:签名= Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIWUekAI =

URL in Android: Signature=Dt9tXa0Rjl%2Ff6YxZ4JaPfsm%2BT%2BMX03gS712nIWUekAI=

这篇关于查询字符串参数的值不能包含'='分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆