当前位置:  技术问答>linux和unix

发往Tracker服务器的HTTP GET请求中编码转换问题

    来源: 互联网  发布时间:2016-06-26

    本文导语:  发往Tracker服务器的HTTP GET请求中,可能含有非数字、非字母的字符,即含有除0~9、a~z、A~Z之外的字符,此时要对字符进行编码转换 请问怎么转换?原理是什么?要转换成什么?查了下HTTP协议没看到怎么转换. 下面是...

发往Tracker服务器的HTTP GET请求中,可能含有非数字、非字母的字符,即含有除0~9、a~z、A~Z之外的字符,此时要对字符进行编码转换
请问怎么转换?原理是什么?要转换成什么?查了下HTTP协议没看到怎么转换.

下面是一个转换的代码,else那部分就是用来转换的,没看明白,是根据什么格式或什么协议来转换的呢
int http_encode(unsigned char *in,int len1,char *out,int len2)
{
int  i, j;
char hex_table[16] = "0123456789abcdef"; 

if( (len1 != 20) || (len2  4];
j++;
out[j] = hex_table[in[i] & 0xf];
}
}
out[j] = '';
return 0;
}

|
例如:空格的ascii码为:0x20:   即:0010 0000, 则0x20 >> 4 = 0000 0010   0x20 & 0xf = 0000 0000 
所以:空格转换为%20
rfc1738:
URL是由一串字符组成,这些字符可以是字母,数字和特殊符号。一个URL可以用多种方法来表现,例如:纸上的字迹,或者是用字符集编码的八位字节序列。URL的解释仅取决于所用字符的特性。在大多数URL方案中,都是使用URL不同部分的字符序列来代表因特网协议中所使用的八位字节序列。例如,在ftp方案中主机名,目录名和文件名就是这样的八位字节序列,它们用URL的不同部分代表。在这些部分里,一个八位字节数可以用这样的字符来表示:该字符在US—ASCII[20]编码字符集中的编码是这个八位字节数。
另外,八位字节数可以被编成如下形式的代码:“%”后加两个十六进制数字(来自于“0123456789ABCDEF”),这两个十六进制数字代表了这八位字节数的值。(字符“abcdef”也可以用于十六进制编码)。如果存在下面的情况:八位字节数在US-ASCII字符集中没有相应的可显示字符,或者使用相应字符会产生不安全因素,或者相应的字符被保留用于特定的URL方案的解释,那么它们必须被编成代码。没有相应的可显示字符:URL只能用US-ASCII字符编码集中的可显示字符表示。US-ASCII中没有用到十六进制的八位字节80-FF,并且00-1F和7F代表了控制字符,这些字符必须进行编码。
不安全:
字符不安全的原因很多。空格字符就是不安全的,因为URL在被转录或者被排版或者被字处理程序处理后其中重要的空格可能被忽略,而可忽略的空格却有可能被解释了。“”字符也是不安全的,因为它们被用来作为URL在文本中的分隔符;而在有些系统
中用引号“"”来界定URL。“#”字符也是不安全的,因为它在万维网和其他一些系统中被用来从“片段/锚点”标志符中界定URL,所以它通常都要被编码。字符“%”被用来对其他字符进行编码,它也是不安全的。其他一些字符,如:"{", "}", "|", "", "^", 
"~","[", "]",和"`",由于网关和其他传输代理有时会对这些字符进行修改,所以它们也是不安全的。必须对URL中所有不安全的字符进行编码。例如,URL中的字符“#”即使是在通常不处理片断或者锚点标志符的系统也需要进行编码,这样如果这个URL被拷贝到使用这些标志符的系统中,也不必改变URL编码了。
保留:
许多URL方案保留了一些字符并赋予特定的含义:它们出现在URL的特定部位并表示特定的含义。如果一个字符对应的八位字节在方案中被保留了,那么这个八位字节必须进行编码。字符";","/", "?", ":", "@", "=" 和 "&"可能被某个方案所保留,除此之外没有其他的保留字符。通常情况下一个八位字节被用一个字符表示后或者被编码之后,URL的解释都是一样的。但这对于保留字符来说就不适用了:对某一特定方案的保留字符进行编码可能会改变URL的语义。这样,在URL中只有字母与数字,以及特殊字符“$-_.+!*'(),”和用作保留目的的保留字符可以不进行编码。另一方面,不必进行编码的字符(包括字母与数字)如果出现在URL的特定部位,只要它们不用作保留目的,则可进行编码。

|


这里表示in字符串中所有的既非字母也非数字的字符i都被编码成%ab的形式

其中a,b都是hex_table中的某个字符,a是i的ascii码高4位组成的数字在hex_table中的映射,b是i的低4位组成的数字在hex_table中的映射。

|
应该是URL编码,看rfc1738.

|
貌似没有转换空格,那么就是 url 的 rfc1738 编码格式...

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.swing类imageicon的类成员方法: tracker定义及介绍
  • Support Incident Tracker
  • 手机跟踪应用 Google Map Gps Cell Phone Tracker
  • c/c++开源软件 iis7站长之家
  • bug跟踪管理系统 Bug Tracker


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3