WebClient.DownloadingString更改请求的URL

时间:2012-12-06 12:06:17

标签: c# .net

如果我将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

我已经尝试过将编码转换为UT8,ISO等等。其中没有人工作过。

1 个答案:

答案 0 :(得分: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;
    }
}