阿里簽名中URLEncode於C#URLEncod不一樣之處

問題

QQ截圖20170106155741

如上圖所示,阿里雲的PercentEncode 轉換! 爲 %21php

PercentEncode 源碼爲:html

package com.aliyuncs.auth;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class AcsURLEncoder {
	public final static String URL_ENCODING = "UTF-8";
	
	public static String encode(String value) throws UnsupportedEncodingException {
		return URLEncoder.encode(value, URL_ENCODING);
	}
	
	public static String percentEncode(String value) throws UnsupportedEncodingException{
        return value != null ? URLEncoder.encode(value, URL_ENCODING).replace("+", "%20")
                .replace("*", "%2A").replace("%7E", "~") : null;
    }
}
 

查找問題

第三方工具

QQ截圖20170106160805
 

上圖代表的確沒有轉義!(感嘆號)java

 

C#中的URLEncode轉義

C#中URLEncode,C#中有兩種URLEncode,WebUlitityHttpUlitityweb

   [TestFixture]
   public class TestUlities
    {
        [Test]
        public void Test()
        {
            var url = @"http://img05.taobaocdn.com/bao/uploaded/TB2BVKlfFXXXXarXXXXXXXXXXXX_!!111708970-0-saturn_solar.jpg";

            var webUrlEncode = WebUtility.UrlEncode(url);

            var httpUrlEncode = HttpUtility.UrlEncode(url);
        }
    }

 

發現都沒有轉義!(感嘆號)工具

 

WHY

 

In general URIs as defined by RFC 3986 (see Section 2: Characters) may contain any of the following characters:ui

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=`.

Any other character needs to be encoded with the percent-encoding (%hh). Each part of the URI has further restrictions about what characters need to be represented by an percent-encoded word.阿里雲

 

解決

QQ截圖20170106173506

使用如下代碼URLEncode 來進行URLEncodeurl

 

  public class AliUrlEncodeHelper
    {
        public static string Encode(string str)
        {
            return !string.IsNullOrEmpty(str) ?
                WebUtility.UrlEncode(str).Replace("+", "%20")
                .Replace("*", "%2A")
                .Replace("%7E", "~")
                .Replace("!", "%21")
                .Replace("'","%27")
                .Replace("(", "%28") 
                .Replace(")", "%29") 
                :str;
        }
    }

結論

阿里的URLEncode 有點過期,或者說自定義的,須要咱們特殊處理。spa

 

附:阿里簽名規則.net

image

 

參考

Which characters make a URL invalid?

Les codes hexas et unicode des caractères usuels, par Nicolas Hoffmann

阿里雲簽名機制

相關文章
相關標籤/搜索