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

エンコードをUT8、ISOなどに変更しようとしましたが、どれもうまくいきませんでした。

4

1 に答える 1

1

サーバーが期待するすべての必要なデータ、Cookie、および要求ヘッダーを送信していることを確認する必要があります。

Fiddler Web Debugger をインストールし、Web ブラウザーからの成功した要求を監視してから、そのような要求をアプリケーションで再作成することをお勧めします。

WebClientCookie を処理していないため、サーバーがエラー ページにリダイレクトしている可能性があります。の独自のバージョンを作成し、WebClientCookie サポートを追加できます。WebClientメソッドを継承してオーバーライドするクラスを作成します。GetWebRequestそこに を追加する必要がありますCookieContainerWebClient以下は、 Cookie を処理する の簡単な実装です。

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 に答える