c#httpclient POST请求:无法发送特殊字符

时间:2013-09-02 04:34:05

标签: c# encoding httpclient urlencode

我有一个应该登录到网站的程序,它使用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”(在addres propereties和请求正文中相同的值)并且一切正常。 UrlEncode执行相同的替换,但在我的程序中它不会被服务器接受。

SOLUTION:

{ password:"df464dsj", username:"username", captchaText:"ABC&%", remember_login:"false" }

的内容
password=f2341f14f&username=username&captha...

1 个答案:

答案 0 :(得分:0)

您正在处理REST应用程序吗?

如果是,则在请求正文中发送您的发布数据,而不是查询字符串。

另请查看:Special characters pose problems with REST webservice communication

上的堆叠帖子