我需要从C#向CLASSIC ASP服务发送HTTP GET请求。 该服务的构建方式是使用Windows-1255编码从QueryString解码数据,而不是标准的UTF-8。
似乎HttpWebRequest类总是用UTF-8编码GET数据,但它对我不起作用。有没有办法从C#发送HTTP GET请求,而GET数据是用不同的UTF-8编码编码的?
感谢。
答案 0 :(得分:2)
您需要在获取请求中设置标题:
内容类型:文本/ XML;字符集=窗户-1255
HttpRequest r = new HttpRequest(.....);
r.Headers.Add("Content-Type", "text/xml; Charset=windows-1255");
也许这篇文章也会有用:
答案 1 :(得分:0)
好的,我终于得到了答案。
首先,在标题中指定ContentType并不起作用。 如果目标URL包含非英文字母,则HttpWebRequest将始终使用UTF-8 + URLEncode来构建请求发送到的最终URI。
要使用与UTF-8不同的编码,我需要自己编码URL值(而不是像我预期的那样为HttpWebRequest提供必要的编码)。
以下构建HTTP GET URL的函数,而值使用任何请求的编码进行编码(而不是使用默认的UTF-8):
string BuildData(NameValueCollection getData, Encoding enc)
{
StringBuilder urldata = new StringBuilder();
for (int i = 0; i < getData.Count; i++)
{
if (i > 0) urldata.Append("&");
urldata.Append(getData.Keys[i] + "=" + HttpUtility.UrlEncode(enc.GetBytes(getData[i])));
}
return urldata.ToString();
}
HttpWebRequest可以与
之类的东西一起使用"http://get-destination.com/submit?" + BuildData(keysAndValues, Encoding.GetEncoding(1255));
在这种情况下,HttpWebRequest获取已编码的URL,该URL不包含非英文字母,并保持原样。