[解決済み] WebException (ステータス: プロトコルエラー)
質問
C# で URL を呼び出すには
WebClient
クラスがあります。以下はそのコードです。-
public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}
このコードは以下のExceptionの詳細で失敗します。
System.Net.WebException: The remote server returned an error: (1201).
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)
Exception Status: ProtocolError
URLが正しくサーバーにヒットしました。サーバーで期待される動作(データベースの更新)が正しく行われる。サーバーが正しくレスポンスを送信している
WebClient
が応答処理をしていない。
また
HttpWebRequest
クラスがありますが、成功しませんでした。
当初は、リクエスト時に同様の問題がありました。を修正したところ、解決しました。
app.config
を以下のように変更しました。-
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
このフォーラムにURLを貼ることができないし、とにかくネットワーク外からアクセスできない。
同じURLをブラウザのアドレスバーにコピーすると、正常に動作し、期待通りの応答が返されます。
では、Windowsアプリケーションの問題とは何でしょうか?
編集1
回答からの提案を実装しました。また、受け入れた回答で提案された この という質問があります。現在、私の関数は次のようになっています。-
public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
client.Headers.Add("Accept", "text/plain");
client.Headers.Add("Accept-Language", "en-US");
client.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
client.Headers["Content-Type"] = "text/plain;charset=UTF-8";
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}
それでも問題は解決しません。レスポンスは、"Success"の代わりに空白文字列("")になっています。これは、サーバーの障害ではないことが確認されています。
での設定を削除すると
app.config
を実行すると、別の例外がスローされます。
System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)
解決方法は?
サーバーから
HTTP 1201
であり、これは
標準ステータスコード
.
WebClient
は、成功しないステータスコード (あなたの場合は認識できないステータスコード) に直面すると、例外を発生して失敗します。
を使用することをお勧めします。 HttpClient クラスを使用することができます。
public async Task<string> SendWebRequest(string requestUrl)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(requestUrl))
return await response.Content.ReadAsStringAsync();
}
どうしても同期でやりたい場合
public string SendWebRequest(string requestUrl)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = client.GetAsync(requestUrl).GetAwaiter().GetResult())
return response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】C#で四捨五入する方法
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?