如果我将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等等。其中没有人工作过。
答案 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;
}
}