我有一个程序应该登录到站点,它使用 POST 请求,一切正常,直到其中一个值包含特殊字符(例如'%')。
captcha = "ABCDE" //all goes fine and well, server accept captcha
captcha = "ABC&%" //server dont accept captcha and return fail
//here is the bad part:
string request = "password=" + HttpUtility.UrlEncode(encpass, Encoding.UTF8) +
"&username=" + login + "&captcha_text=" + HttpUtility.UrlEncode(captcha, Encoding.UTF8);
另外,我当然用谷歌搜索了它,并检查了我能找到的所有内容。我虽然需要“警告”服务器 abaut 编码,所以我添加了
request.Headers.TryAddWithoutValidation("Content-Type", @"application/x-www-form-urlencoded; charset=UTF-8");
但它仍然没有帮助我。
内容类型和方式请求应该看起来像我从 Firebug 获得的,所以如果我能在那里找到一些答案 - 请指出。
modify0:另外,我将我的程序发送到服务器的内容与浏览器请求(使用 Firebug)进行了比较,我的请求完全一样。唯一的区别 - 我的请求在包含特殊字符的值中不被接受。
modify1:此外,当我在浏览器中检查它时,服务器在处理特殊字符时没有问题。例如,它(浏览器)将“K&YF82”发送为“captcha_text=K%26YF82”(地址属性和请求正文中的值相同)并且一切正常。UrlEncode 做同样的替换,但在我的程序中它没有被服务器接受。
解决方案:
{ password:"df464dsj", username:"username", captchaText:"ABC&%", remember_login:"false" }
代替
password=f2341f14f&username=username&captha...