2013-01-17 8 views
7

mówię do usługi przesyłania plików, która akceptuje dane pocztowe, a nie dane formularzy. domyślnie HttpURLConnection java ustawia nagłówek Content-Type na application/x-www-form-urlencoded. jest to oczywiście błędne, jeśli publikuję czyste dane.jak usunąć nagłówek z adresu URLConnection

Ja (klient) nie znam typu zawartości, więc nie chcę, aby nagłówek Content-Type był ustawiony w ogóle. usługa ma funkcję, w której będzie odgadnąć rodzaj treści (na podstawie nazwy pliku, odczytania niektórych danych z pliku itp.).

Jak usunąć ustawienie nagłówka? nie ma nagłówka usuwania, a ustawienie go na null nie zmienia wartości, a ustawienie pustego łańcucha powoduje, że nagłówek jest ustawiony bez wartości.

+1

Czy znalazłeś jakiś sposób na to? – Arya

Odpowiedz

1

Użyj Apache HttpClient zamiast URLConnection

Korzystanie biegły Request wygenerować swoją prośbę

użytkowania removeHeader()

+0

nie jest opcją, ponieważ muszę stworzyć bibliotekę, która może działać na Androidzie i zwykłym JSE. Problem z Androidem polega na tym, że zawiera on wersję 4.x klienta http, która nie jest zgodna z żadną autonomiczną wydaną wersją. jeśli spróbujesz powiązać określoną wersję httpclient, pojawi się konflikt. –

+0

Próbuję zaimplementować bota, który używa Wyszukiwarki grafiki Google (nie używając wyszukiwania niestandardowego), a wyszukiwarka grafiki Google wydaje się nie przesyłać nagłówków 'Content-Type' i' Content-Length', więc mam ten sam problem. A HttpClient apache httpcomponents też nie pasuje do mojego przypadku: HttpClient nie obsługuje proxy SOCKS (potrzebuję poprawki i nie podoba mi się to). –

1

Nie testowałem tego podejścia, ale można spróbować to:

Rozszerz HttpURLConnection i spróbuj przez przesłonięcie metod getContentHandler() i setContentHandler (...). Najprawdopodobniej powinno to zadziałać tak, jak tylko spojrzysz na kod getContentHandler().

0

Co to znaczy "nie chcę, aby nagłówek Content-Type był ustawiony w ogóle"?

Przeglądarka (lub inny klient http) wysyła twoje zapytanie pocztowe na serwer, więc musi poinformować serwer w jaki sposób zakodował parametry.

Jeśli nagłówek Content-Type nie jest ustawiony, po stronie serwera (= twój serwer) nie będzie można zrozumieć, jak analizować odebrane dane.

Jeśli nie został ustawiony typ zawartości, zostanie użyta wartość domyślna.

Twoją przeglądarkę (lub inny klient HTTP) musi zrobić dwie rzeczy: pary

  1. Wysłać klucz/wartość.
  2. Poinformuj serwer o tym, jak pary klucz/wartość zostały zakodowane.

Tak więc niemożliwe jest całkowite pozbycie się tego nagłówka.

+0

Nie wysyłam parametrów. to przesyłanie plików. Publikuję dane binarne. usługa zapisuje zawartość binarną tak jak jest.jedynym powodem, dla którego potrzebuje typu zawartości jest ustawienie meta danych dla pliku. –

+0

Po przesłaniu pliku obrazu do Wyszukiwarki grafiki Google przeglądarka nie wysyła nagłówka 'Content-Type', a także nie ma nagłówka' Content-Length'. –

0

Właśnie dokonałem tego, ustawiając nagłówek na wartość null.

connection.setRequestProperty(MY_HEADER, null); 
Powiązane problemy