无法在http post请求中发送特殊字符,C#

时间:2017-02-02 18:10:53

标签: c# http post

我正在自动登录过程,在这样做的过程中,我会得到不同类型的密码,其中包含特殊字符。

我的代码如下所示,我尝试了UrlEncode()密码,但这并不起作用。如果您在我的代码中发现任何问题或我可以找到解决方法,请告诉我。我的密码是" aab $#*#%232"和" @#:.; $%^& + -_ h1&" :

string uriString = "http://" + IP + URI ;    
string postData = "";    
TraceLine("The uri string is " + uriString);    
foreach (string key in values.AllKeys)    
{    
    TraceLine(key + "  " + values[key]);    
    postData += key + "=" + values[key] + "&";}}    
    if (postData.Length > 0) {    
    postData = postData.TrimEnd(postData[postData.Length - 1]);
}    
TraceLine("The postData string is " + postData);    
HttpWebRequest req =(HttpWebRequest)System.Net.WebRequest.Create(uriString);    
req.ContentType = "application/x-www-form-urlencoded";    
req.KeepAlive = false;    
req.Method = "POST";    
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postData);     
req.ContentLength=bytes.Length;    
System.IO.Stream os = req.GetRequestStream();    
os.Write(bytes, 0, bytes.Length);    
os.Close();}

1 个答案:

答案 0 :(得分:2)

你实际上得到了正确的结果。请参阅,字符串已转义,以使其与通过HTTP发送兼容。你想要:“aab $##%232”但你得到了:“aab%24%23 %23%25232”
%24 = $
%23 =#
%25 =%

为了获得你想要的字符串,你只需要使用Uri.UnescapeDataString方法解除字符串的转义。

string str = Uri.UnescapeDataString("aab%24%23*%23%25232");

我仍然不鼓励您以纯文本形式发送和接收敏感数据,即使它已被转义。也许来自加密的东西有帮助吗?