c# httpclient POST 请求 : cant send special characters

标签 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”(地址属性和请求正文中的值相同)并且一切正常。 UrlEncode 做同样的替换,但在我的程序中它没有被服务器接受。

解决方案:

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

代替

password=f2341f14f&username=username&captha...

最佳答案

你在处理 REST 应用程序吗??

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

另请查看堆栈帖子:Special characters pose problems with REST webservice communication

关于c# httpclient POST 请求 : cant send special characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565697/

相关文章:

java - 如何使用 Apache HttpClient 发布非 JSON 请求?

c# - 在 WPF 中使用 C# 代码删除 IE 缓存和 Cookie

c# - 在一个 DbContext 中使用多个数据库

c# - ASP.NET和KnockoutJS中如何设置ko.observable的默认值为控件本身的默认值?

c++ - 将 3 个数字数据压缩为一个字节

java - Tomcat 上的 HTTPClient

c# - 在巴基斯坦的 Twitter Streaming API 中传递经度和纬度

c# - 使用 Pbkdf2 加密通过 Salt 加密和验证哈希密码

Python unicode代码点到unicode字符

java - 来自 Jersey 客户端的 CLOSE_WAIT 中的套接字