2009-07-16 28 views
4

Webリクエストに「Date」ヘッダーが必要なAPIと統合しようとしています。あなたがよく知っているように、.NETは要求にデフォルトのDateヘッダーを追加するか、または表示する機能を削除しました。そのため、回避策について疑問を抱いていました。ASP.NET:httpwebrequest date header回避策

ここではキャッチです:私はソケットのようなもののために私のサーバーに "アクセス許可"がないので、TCPClientsを使うことはできません。日付ヘッダーを偽ったり、それをトリックして日付ヘッダーを投稿したりするためにシステムを「不正行為」させる方法はありますか?または、私はこのAPIをあきらめるべきですか?

おかげで...

(PS、言語があればVB.NETであなた下さい:))

+0

TCPClientの場合:特定のAPIにアクセスできず、ポート80と通信していることを確認しましたか? –

+0

どのようにポートを設定しますか? – Jason

+0

私は現在同じことを試みています。私は絶えずZeepから "メッセージ時間はサーバーのクロックや日付ヘッダーがあまり提供されていないというエラーメッセージを受け取っています。" –

答えて

0

文書によると、システムは現在の日付と時刻と日付ヘッダを追加します。ヘッダに別の値が必要ですか?

request.Headers.AddWithoutValidateを使用して追加できます。

+0

もう一度ジョン:私はすべてのリクエストヘッダーをプルダウンすると、日付は含まれていません。私はGMTに合うために+ 7時間の日付を送る必要があります。 – Jason

+0

また、保護されているため、request.Headers.AddWithoutValidateにアクセスできません。 – Jason

+0

クラップス。私は保護されたメンバーを私に見せないように設定したと思った。ごめんなさい。しかし、デートでは、それは間違ったことを送信する、あなたの目標はそれを理解しないだろうか? –

1

これは世界最速のコードではありませんが、それはしばらくのために働くかもしれません:

Type type = request.Headers.GetType(); 
MethodInfo method = type.GetMethod("AddWithoutValidate", 
    BindingFlags.Instance | BindingFlags.NonPublic); 
method.Invoke(request.Headers, new [] { "Date", DateTime.Now.ToString() }) 

ちょうどプライベートまたは保護されたメンバーにアクセスするためにリフレクションを使用することは非常に壊れやすいので、いずれにも破ることができることに注意してくださいMSが行う.NETへのアップデート...

+0

私の研究から、これは役に立たないと思われます。彼らは、文書化されているように、現在の日付/時刻のヘッダーを送信することさえしません。 –

+0

ところで、私はこれをdownvoteしようとしています。それは非常に悪いことではなく、将来の読者にこれが解決策に寄与していないことを示すことです(HttpWebRequestは設定されているかどうかにかかわらずヘッダーを送信しないためです) –

+0

問題はありません... – ConsultUtah

1

日付の問題に対する答えが見つかりました。リクエストをHttpWebRequestとして直接アクセスするだけです。それは簡単な答えのようだが、うまくいった。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri) ; 

request.Date = date; 
request.Method = "POST"; 
+0

.NETランタイムはこれをサポートしていますか? –