用xmlhttp组件模拟注册登陆为何会失败,该如何处理

用xmlhttp组件模拟注册登陆为何会失败
有一个下载站,我用xmlhttp组件模拟注册用户的过程,可以注册成功,也可以登陆,但是和用正常渠道注册的用户相比较,前者不送注册的积分,把xmlhttp组件模拟注册时返回的成功信息,我仔细看了一下,和正常渠道注册时返回的成功信息有差别,那就是xmlhttp组件模拟注册时无论我注册的用户名是什么,他的成功信息中显示的用户名都是:nastrq.
   
  一句话,我的模拟登陆肯定被服务器检测了出来,网站允许我注册成功,但是却不送积分,所以这个注册就毫无意义了。
   
  代码贴出:
VB code

Set http = CreateObject("winhttp.winhttpRequest.5.1")

Function regYangGuang()
  Dim retval, xmlmessage
  
  xmlmessage = "username=" & username & "&"
  xmlmessage = xmlmessage & "password=" & password & "&" & "pwdconfirm=" & password & "&"
  xmlmessage = xmlmessage & "ourl=" & ourl & "&" & "msn=" & msn & "&" & "email=" & email & "&"
  xmlmessage = xmlmessage & "select1=" & select1 & "&" & "privacy=0&"
[color=#FF0000]  'xmlmessage = xmlmessage & "imagesubmit.x=41&imagesubmit.y=17&"[/color]
  xmlmessage = xmlmessage & "answer=" & answer & "&question=" & answer
  xmlmessage = xmlmessage & "&qq=" & qq
  xmlmessage = xmlmessage & "&Country=" & Country & "&Province=" & Province & "&City=" & City
[color=#FF0000]'以上全部post的数据是用httpwatch工具抓取的,除了imagesubmit.x和imagesubmit.y不正确
’其它的都没问题。这个imagesubmit是提交按钮图片,我不知道imagesubmit的坐标是如何生成的。  [/color]
 
 http.open "POST", strurl, False
 http.Option(4) = 13056
 http.Option(6) = False
 http.setrequestheader "CONTENT-TYPE", "application/x-www-form-urlencoded"
 http.setrequestheader "Referer", "http://www.pallasa.com/user/User_Login.asp"
 http.send (xmlmessage)
 retval = BytesToBstr(http.responsebody, "gb2312")
 
 If http.Status = 200 Then
    Debug.Print retval
 End If
 regYangGuang = http.Status
End Function



  我又用网站提供的第二个接口进行注册,就是两步注册的那个接口,因为那个接口注册时没有imagesubmit的坐标的提交,我完全用httpwatch抓取的信息进行提交。可以结果是一样的。
  对了,这个网站是:http://www.pallasa.com ,大家看一下它的注册方式。



------解决方案--------------------
你这意见不用保留,对于HTTP协议来说,普通的POST值如果不进行URL编码,肯定是错误的使用。比如你提交的值包含一段这样的内容“&password=12345”,应该放在 test段,那么你看看你不编码的数据整合起来会是什么样?
标准来说应该是
password=23456&test=%26password%3D12345

如果你不编码,结果会是这样
password=23456&test=&password=12345

你认为你取 password值的时候系统会认为你的是 12345还是 23456?

编码是确保格式正确必须的步骤,这个是毋庸置疑的。