表单编码问题

真是晕啊!

这几天做个模拟机器人居然出现这样一个表单编码的问题,之前从来都没遇到过,我要登录的一个页面是需要提交viewstate,但viewstate中含有很多空格,我在请求提交数据的时候设置了表单的编码request.ContentType = "application/x-www-form-urlencoded";post过去的数据也经过了UrlEcode编码,但始终是模拟登录不了,找了两天都找不到问题是出在哪,任务进度的时间就快到了,真是急死我了,实在没办法,请求项目经理帮助,经过研究发现原来是ViewState中空格编码的问题,viewstate经过HttpUtility.UrlEncode编码后,空格编码成了+号,这样是不行的,这里还需要把+替换成%20才行,唉,终于天晴了,可以松口气了,明天加油,继续把下面的任务完成。


参考资料:

问题分析:

   
查了下JS encode的相关内容, 总于发现+号的秘密。
   html
中因为一些非标准的做法,将+等同于空格进行处理(当Html的表单被提交时, 每个表单域都会被Url编码之后才在被发送。由于历史的原因,表单使用的Url编码实现并不符合最新的标准。例如对于空格使用的编码并不是%20,而是+号,如果表单使用的是Post方法提交的,我们可以在HTTP头中看到有一个Content-Typeheader,值为 application/x-www-form-urlencoded,大部分应用程序均能处理这种非标准实现的Url编码)。
   
在搜索引擎中做了下尝试: 
    keyword =  e h
变送器  , url =http://www.google.cn/search?hl=zh-CN&newwindow=1&q=e+h变送器   (空格被转化为+)
    keyword = e+ h
变送器 , url = http://www.google.cn/search?hl=zh-CN&newwindow=1&q=e%2Bh变送器  (+号被进行了转义为%2B,程序才能正常处理)


参考地址:http://agapple.iteye.com/blog/773061


你可能感兴趣的:(html,搜索引擎,header,url,任务)