1

我需要将 HTTP GET 请求从 C# 发送到 CLASSIC ASP 服务。该服务的构建方式是使用 Windows-1255 编码而不是标准的 UTF-8 对来自 QueryString 的数据进行解码。

似乎 HttpWebRequest 类总是用 UTF-8 编码 GET 数据,它对我不起作用。有没有办法从 C# 发送 HTTP GET 请求,而 GET 数据的编码不同于 UTF-8 编码?

谢谢。

4

2 回答 2

2

您需要在获取请求上设置标头:

内容类型:文本/xml;字符集=windows-1255

HttpRequest r = new HttpRequest(.....);    
r.Headers.Add("Content-Type", "text/xml; Charset=windows-1255");

也许这篇文章也会有一些用处:

从 http get 请求中读取非英文字符

于 2012-09-05T14:07:32.643 回答
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 不包含非英文字母,并保持原样。

于 2012-09-24T19:23:40.543 回答