阿里签名中URLEncode于C#URLEncod不同之处
来源:互联网 发布:非农数据的影响 编辑:程序博客网 时间:2024/06/14 04:21
问题
如上图所示,阿里云的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.
解决
使用以下代码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 有点过时,或者说自定义的,需要我们特殊处理。
附:阿里签名规则
参考
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
阅读全文
0 0
- 阿里签名中URLEncode于C#URLEncod不同之处
- 关于C++与C中const不同之处
- C和C++中const不同之处
- Ubuntu中ctrl+c和ctrl+z的不同之处
- C语言中宏和函数的不同之处
- C语言不同之处
- Jquery字符UrlEncode 编码、解码 --C#UrlEncode
- c实现的urlencode
- c语言urlEncode实现
- 自学篇-&于&&不同之处(六)
- html5相较于以前版本不同之处
- J2ME中URLEncode函数
- 挖坑中....urlencode
- python中urlencode方法
- C # 和 Java的不同之处
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- Android开源:数据库ORM框架GreenDao数据库查询篇
- 阿里面试回来,想和Java程序员谈一谈
- zkclient客户端读取发生乱码问题!
- Java maven搭建SSM框架主要配置文件
- Python中import机制
- 阿里签名中URLEncode于C#URLEncod不同之处
- HC05模块对接操作
- 部署测试fabric1.0及源码解析
- stm32时钟相关
- Windows安装Tensorflow步骤
- SVN
- Android开源:数据库ORM框架GreenDao封装工具类使用
- 将数据导入数据库的方法
- 集合取出去除重复元素