2013-01-17 9 views
7

私は、フォームデータではなく、投稿データを受け付けるファイルアップロードサービスと話しています。デフォルトでは、javaのHttpURLConnectionContent-Typeヘッダーをapplication/x-www-form-urlencodedに設定します。私が純粋なデータを投稿しているのなら、これは明らかに間違っています。URLConnectionからヘッダを削除する方法

私(クライアント)はコンテンツタイプを知らないので、Content-Typeヘッダーをまったく設定したくありません。サービスには、コンテンツタイプ(ファイル名に基づいて、ファイルからいくつかのデータを読み込むことなど)を推測する機能があります。

ヘッダーの設定を解除するにはどうすればよいですか?削除ヘッダーはありません。nullに設定すると値が変更されず、空の文字列に設定されるとヘッダーに値が設定されなくなります。

+1

これにはどのような方法がありますか? – Arya

答えて

1

使用のApache HttpClientの代わりに、URLConnectionの

リクエスト

使用removeHeader()

+0

私はアンドロイドとプレーンJSEで実行できるライブラリを生成する必要があるので、オプションではありません。アンドロイドの問題は、スタンドアロンのリリース版と一致しないhttpclientの4.xバージョンをバンドルすることです。特定のバージョンのhttpclientをバンドルしようとすると、競合が発生します。 –

+0

Google Image Search(カスタム検索を使用しない)を使ってボットを実装しようとすると、Google Image Searchは 'Content-Type'と' Content-Length'ヘッダを送信しないようですので、同じ問題があります。また、Apache HTTPコンポーネントのHttpClientも私の場合に適合しません:HttpClientはSOCKSプロキシをサポートしていません(調整が必要ですが、私はそれが気に入らない)。 –

1

を生成するRequest流暢使用私はこのアプローチをテストしていませんが、あなたはこれを試すことができます。

HttpURLConnectionを拡張し、そのgetContentHandler()およびsetContentHandler(...)メソッドをオーバーライドしてみます。ほとんどの場合、これはgetContentHandler()のコードを見てください。

0

"Content-Typeヘッダーをまったく設定したくありません"という意味はどうですか?

ブラウザー(または他のhttpクライアント)は、サーバーにポストリクエストを送信するので、パラメーターをエンコードする方法をサーバーに通知する必要があります。

Content-Typeヘッダーが設定されていない場合、サーバー側では受信したデータの解析方法を理解できません。

Content-Typeを設定しなかった場合、デフォルト値が使用されます。

あなたのブラウザ(あるいは他のHTTPクライアントは)2つを行う必要があります

  1. は、キー/値のペアを送信します。
  2. キー/値のペアがどのようにエンコードされたかをサーバーに通知します。

このヘッダーを完全に取り除くことは不可能です。

+0

私はパラメータを送信していません。それはファイルのアップロードです。私はバイナリデータを投稿しています。サービスはバイナリコンテンツをそのまま保存します。コンテンツタイプが必要な唯一の理由は、ファイルのメタデータを設定することです。 –

+0

イメージファイルをGoogle Image Searchにアップロードすると、ブラウザは 'Content-Type'ヘッダーを送信せず、' Content-Length'ヘッダーも表示されません。 –

0

これを達成するには、ヘッダーをnullに設定します。

connection.setRequestProperty(MY_HEADER, null); 
関連する問題