阿里签名中URLEncode于C#URLEncod不同之处

转载 2017年11月15日 09:46:56

问题

QQ截图20170106155741

如上图所示,阿里云的PercentEncode 转换! 为 %21

PercentEncode 源码为:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
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;
    }
}
01
  

查找问题

第三方工具

01
<a href="http://images2015.cnblogs.com/blog/684558/201701/684558-20170106162851378-1970650580.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="QQ截图20170106160805" src="http://images2015.cnblogs.com/blog/684558/201701/684558-20170106162852784-188184266.png" alt="QQ截图20170106160805" width="644" height="170" border="0"></a>
01
  

上图表明的确没有转义!(感叹号)

 

C#中的URLEncode转义

C#中URLEncode,C#中有两种URLEncode,WebUlitity HttpUlitity

01
02
03
04
05
06
07
08
09
10
11
12
13
[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:

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 来进行URLEncode

 

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
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 有点过时,或者说自定义的,需要我们特殊处理。

 

附:阿里签名规则

image

 

参考

Which characters make a URL invalid?

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

阿里云签名机制



转载于          https://www.cnblogs.com/HQFZ/p/6256821.html


java中import、package的不同之处

  • 2015年01月26日 22:30
  • 18KB
  • 下载

【转】使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处

使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处   作者:Arthur V. English 出处:IBM   ...

js在IE和Firefox不同之处

  • 2012年02月16日 09:58
  • 64KB
  • 下载

大数据技术与抽样数据分析的不同之处

大数据和以往的信息产出方式相比具有三个明显的特征—数据量大、非结构性和实时性,它创造了一个无限可能的世界。企业正在以史无前例的方式建立和应用大数据解决方案,这些方案不仅能够帮助他们实现收益的最大化,更...

OC与C++的不同之处

  • 2014年06月23日 13:43
  • 2.16MB
  • 下载

IE&amp;Firefox的不同之处

  • 2010年01月08日 14:09
  • 2KB
  • 下载

HashSet与TreeSet对重复元素的判断不同之处

转:http://wlt2008-com.iteye.com/blog/1447207 HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阿里签名中URLEncode于C#URLEncod不同之处
举报原因:
原因补充:

(最多只允许输入30个字)