0

如果我将 URL 放在浏览器中,我的服务器会正​​确响应(一个 XML)。虽然,如果相同的 URL 通过 WebClient.DownloadingString() 方法,URL 中的某些内容会发生变化,并且我的服务器会正​​确响应,但会显示拒绝访问消息(XML 也是如此),就好像发生了某些变化一样。

“错误信息”

<?xml version="1.0" encoding="ISO-8859-1"?><said:service xmlns:said="http:xxx"><said:codigo_erro>8</said:codigo_erro><said:mensagem_erro>Unable</said:mensagem_erro></said:service>

根据请求使用的 URL 如下所示:

http://...<parameter1>S<%2Fparameter1>%0D%0A++<parameter2>S<%2Fparameter2>%0D%0A++<parameter3>S<%2Fparameter3>%0D%0A<%2Fqueryservice>%0D%0A%09%09

我已经尝试将 de Encode 更改为 UT8、ISO 等。它们都没有工作。

4

1 回答 1

1

您必须确保发送服务器期望的所有必要数据、cookie 和请求标头。

我建议您安装 Fiddler Web Debugger 并监控来自 Web 浏览器的成功请求,然后尝试在您的应用程序中重新创建此类请求。

也许服务器正在将您重定向到某个错误页面,因为WebClient它没有处理 cookie。您可以创建自己的版本WebClient并添加 cookie 支持。创建一个继承WebClient并覆盖GetWebRequest方法的类,您必须在其中添加CookieContainer. 以下是处理 cookie 的简单实现WebClient

public class MyWebClient : WebClient
{
    public CookieContainer CookieContainer { get; private set; }

    public MyWebClient()
    {
        this.CookieContainer = new CookieContainer();
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = this.CookieContainer;
            (request as HttpWebRequest).AllowAutoRedirect = true;
        }

        return request;
    }
}
于 2012-12-06T12:12:51.413 回答