阿里签名中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#中使用server.UrlEncode() 方法

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

C#版winform实现UrlEncode

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

C#实现UrlEncode (URL编码)

public static string UrlEncode(string str)         {             StringBuilder sb = new StringBuil...
  • songkexin
  • songkexin
  • 2012年02月18日 13:00
  • 15761

urlencode

function durlencode($url) {     static $fix = array('%21', '%2A','%3B', '%3A', '%40', '%26', '%3D',...
  • hlzzy123456
  • hlzzy123456
  • 2016年06月07日 18:06
  • 151

urlencode AND urldecode

URLEncode的作用到底是什么呢?什么情况下非要用URLEncode方法呢?
  • dingxy
  • dingxy
  • 2011年03月08日 16:25
  • 618

为什么要 urlencode()

转自:http://www.cnblogs.com/oxspirt/p/6165821.html 1.是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和...
  • rankun1
  • rankun1
  • 2017年08月26日 12:01
  • 522

阿里搜索下拉提示签名机制

最近公司在做搜索,要求下拉提示使用阿里的下拉提示,其他都还好说,就是这个签名机制,弄了一下午,也是遇到了坑,特此记录。...
  • wyl850503
  • wyl850503
  • 2017年01月13日 11:56
  • 182

[转]Go语言(Golang)的Web框架比较:gin VS echo

Go语言(Golang)的web框架比较之:gin vs echo由 butaixianran 在 2016-01-23 22:00 发布 35423 次点击原文发在:https://771dian....
  • heiyeshuwu
  • heiyeshuwu
  • 2018年01月25日 18:15
  • 946

python模块大全

pymatgen  multidict  yarl  regex  gvar  tifffile  jupyter  scipy  gensim  pyodbc  pyldap  ...
  • mcj1314bb
  • mcj1314bb
  • 2018年01月25日 13:38
  • 162

如何注册阿里大于申请签名和短信模板

以下案例是实际工作中注册阿里大于用于发送短信验证码和短信通知 1.首先登录阿里大于首页: http://www.alidayu.com/?channel=baidu&spm=a1z15.973...
  • u014079773
  • u014079773
  • 2017年03月25日 19:47
  • 6843
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阿里签名中URLEncode于C#URLEncod不同之处
举报原因:
原因补充:

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