阿里签名中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


C#版winform实现UrlEncode

控制台或Winform程序中如何编码或解码Server.URLEncode 在Asp.net中可以使用Server.HTMLEncode和Server.URLEncode 将...
  • xingxing513234072
  • xingxing513234072
  • 2013年08月05日 17:05
  • 4694

在C#中使用server.UrlEncode() 方法

控制台或Winform程序中如何编码或解码Server.URLEncode2010年07月10日 星期六 23:03在Asp.net中可以使用Server.HTMLEncode和Server.URLE...
  • lploveme
  • lploveme
  • 2010年12月25日 18:30
  • 34846

在C#中使用server.UrlEncode() 方法

在Asp.net中可以使用Server.HTMLEncode和Server.URLEncode 将文本或URL的特殊字符编码, 但在控制台或Winform程序中没有办法使用到这些方法, 解决办...
  • shenzhenlongman
  • shenzhenlongman
  • 2016年11月02日 09:58
  • 631

使用阿里大于发送短信验证码

前提条件 注册阿里大于(原名阿里大鱼),注册地址如下 https://www.alidayu.com/ 登录后前往应用管理 >> 应用列表 >> 创建你的应用 创建好应用之后点击设置按钮进入设置页面...
  • javalover_yao
  • javalover_yao
  • 2016年08月05日 16:35
  • 17189

thinkphp3.2 如何使用 阿里大鱼短信接口

1 在开发者控制平台里下载sdk 2 解压后放在ThinkPHP\Library\Org\Alidayu下(Alidayu名字是自定义的) 3 修改其中的4个文件.php 改为 .class.ph...
  • u010957293
  • u010957293
  • 2016年10月06日 14:10
  • 6451

阿里云视频点播使用JavaScript上传文件重命名问题解决

这段时间用到了阿里云的“视频点播”功能,在上传视频文件到阿里云的OSS的时候遇到了一些问题,就是无法进行重命名文件的问题,导致文件可能会重复。 百度了很多资料也没找到什么头绪,也给阿里云客服提交了“工...
  • gjirong
  • gjirong
  • 2016年08月05日 17:03
  • 2954

java中import、package的不同之处

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

10M、100M、1000M网线的做法及不同之处

  • 2013年11月28日 19:43
  • 28KB
  • 下载

数据库差异备份与增量备份的不同之处

  • 2013年03月29日 09:41
  • 12KB
  • 下载

js在IE和Firefox不同之处

  • 2012年02月16日 09:58
  • 64KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阿里签名中URLEncode于C#URLEncod不同之处
举报原因:
原因补充:

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