2011-09-29 13 views
6

WebクライアントのC#でリクエストヘッダを追加します。要求ヘッダーも追加します。それは動作しませんし、私は次の例外を取得するしかし私はその後、バイト配列にウェブページをダウンロードしていると、次のコードは、Response.Writeをして、それを印刷してい

/***********  Init request headers ********/ 
    NameValueCollection requestHeaders = Request.Headers; 
    foreach (string key in requestHeaders) 
    { 
     client.Headers.Add(key, requestHeaders[key]); 
    } 
    /***************************************************/ 

:私は、次のコードでそれをやろう

このヘッダは、適切なproperty.Parameter名を使用して変更する必要があります。

に名前を付けます

誰も私にこれを手伝ってもらえますか? WebClientで要求ヘッダーを追加する正しい方法は何ですか?

ありがとうございます。あなたはまた

Webクライアントのプロパティ(CachePolicyContentLengthまたはContentType)のいずれかを使用して設定する必要がありますされ、いくつかのヘッダーを設定しようとしているよう

+0

あなたがしようとしていることは、私にとっては奇妙に見えます。ページリクエストからWebClientにいくつかのヘッダーを渡す必要がありますか? –

+0

私がしようとしているのは、WebClientを使用してページをダウンロードすることです。これを正しく行うには、User-Agentなどの正しいリクエストヘッダを渡す必要があります。これらは、ブラウザウィンドウでページを読み込むときにブラウザによって送信されるものと同じヘッダである必要があります。 – cycero

+0

どのようなタイプの例外ですか? –

答えて

5

ヘッダのコレクションは、ここでは、MSDNのページに記載されているように可能なヘッダのいくつかの「保護」:http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx

をこのページにはあなたが必要とするすべての答えを与えることが、重要な部分を引用しているようだ:

一部の一般的なヘッダーは制限されているとみなされ、 システムで保護されており、WebHeaderCollectionオブジェクトで設定または変更することはできません。 WebClientオブジェクトに関連付けられた WebHeaderCollectionオブジェクトにこれらの制限付きヘッダーのいずれかを設定しようとすると、後で 要求を送信しようとすると 例外がスローされます。システムによって保護

制限ヘッダが含まれるが、 以下に限定されない:

Date 

Host 

また Webクライアントオブジェクトを使用する場合、いくつかの他のヘッダもまた制限されます。これらの制限されたヘッダには、それだけ 以下に限定されない:

Accept 

Connection 

Content-Length 

Expect (when the value is set to "100-continue" 

If-Modified-Since 

Range 

Transfer-Encoding 

HttpWebRequestクラスは、上記 ヘッダーの一部を設定するためのプロパティがあります。アプリケーションでこれらのヘッダーを設定することが重要な場合は、 WebRequest クラスの代わりにHttpWebRequestクラスを使用する必要があります。

これは、Dateやhostなどのヘッダーの多くが、別の要求で別に設定する必要があると考えられます。あなたはそれらをコピーするべきではありません。確かに私は個人的には、あなたがそれらのどれもコピーしてはならないことを示唆しているでしょう。あなた自身のユーザーエージェントを置く - あなたが特定の価値に頼っているページなら、あなたはその情報を与えるために元のユーザーに頼るのではなく、常に有効な値を送っていることを確認したいと思うでしょう。

あなたがしていることを完全に理解することなく、何かを見つけてそれをするのではなく、あなたがしなければならないことを本質的に解決してください。

+1

私はAcceptヘッダーを設定する必要があります。これを代わりに行いました。((HttpWebRequest)request).Accept = "application/json";私はWebRequest.Createを使用しています。 –

+0

(HttpWebRequest)webRequestで同じ問題が解決されました.UserAgent = Request.UserAgent;それはプロキシ – Morvael

1

が見える、それはあなたが、盲目的にすべてのヘッダをコピーすることは非常に良いではありませんあなたが本当に必要なものだけを入手する必要があります。

関連する問題