2013-01-17 2 views
7

데이터를 양식이 아닌 게시물 데이터를 허용하는 파일 업로드 서비스와 이야기하고 있습니다. 기본적으로 java의 HttpURLConnectionContent-Type 헤더를 application/x-www-form-urlencoded으로 설정합니다. 순수한 데이터를 게시하는 경우 이것은 분명히 잘못되었습니다.URLConnection에서 헤더를 제거하는 방법

(클라이언트)는 콘텐츠 형식을 알지 못하므로 Content-Type 헤더를 전혀 설정하지 않으려합니다. 이 서비스에는 파일 이름을 기반으로 파일에서 일부 데이터를 읽는 등 컨텐츠 유형을 추측 할 수있는 기능이 있습니다.

어떻게 헤더를 설정 해제합니까? 제거 헤더가없고 null으로 설정하면 값이 변경되지 않고 빈 문자열로 설정하면 헤더가 값없이 설정됩니다.

+1

다른 방법이 있습니까? – Arya

답변

1

사용 아파치 HttpClient 대신 URLConnection의

사용 나는이 방법을 테스트하지 않은하지만 당신이 시도 할 수 있습니다 귀하의 요청을

사용 removeHeader()

+0

옵션이 안드로이드 및 일반 JSE에서 실행할 수있는 라이브러리를 생성해야합니다. 문제는/standalone 릴리스 버전과 일치하지 않는 httpclient의 4.x 버전을 번들로 포함한다는 것입니다. 특정 버전의 httpclient를 번들로 만들려고하면 충돌이 발생합니다. –

+0

Google 이미지 검색 (맞춤 검색을 사용하지 않음)을 사용하는 봇을 구현하려고합니다. Google 이미지 검색은 'Content-Type'및 'Content-Length' 헤더를 보내지 않는 것으로 보이므로 동일한 문제가 있습니다. 그리고 아파치 httpcomponents의 HttpClient도 내 경우에 적합하지 않습니다. HttpClient는 SOCKS 프록시를 지원하지 않습니다 (비틀기가 필요합니다.) –

1

를 생성 할 Request를 유창 :

을 HttpURLConnection을 확장하고 getContentHandler() 및 setContentHandler (...) 메소드를 재정 의하여 시도하십시오. 아마도 이것은 getContentHandler()의 코드를 살펴볼 때 유용 할 것이다.

0

"Content-Type 헤더를 전혀 설정하지 않겠다"는 의미는 무엇입니까?

브라우저 (또는 다른 http 클라이언트)가 게시 요청을 서버에 전송하므로 서버에 매개 변수를 인코딩 한 방법을 서버에 알려야합니다.

Content-Type 헤더가 설정되지 않은 경우 서버 측에서 사용자 (서버)는 수신 된 데이터를 구문 분석하는 방법을 이해할 수 없습니다.

Content-Type을 설정하지 않은 경우 기본값이 사용됩니다.

  1. 보내기 키/값 쌍 :

    당신의 브라우저 (또는 다른 HTTP 클라이언트)는 두 가지 작업을 수행해야합니다.

  2. 키/값 쌍이 인코딩 된 방법을 서버에 알려줍니다.

따라서이 헤더를 완전히 없애는 것은 불가능합니다.

+0

매개 변수를 전송하지 않습니다. 파일 업로드입니다. 나는 이진 데이터를 게시하고있다. 서비스는 바이너리 컨텐트를있는 그대로 저장합니다.콘텐츠 형식이 필요한 유일한 이유는 파일의 메타 데이터를 설정하기 위해서입니다. –

+0

이미지 파일을 Google 이미지 검색에 업로드하면 브라우저는 Content-Type 헤더를 보내지 않으며 Content-Length 헤더도 누락됩니다. –

0

방금 ​​헤더를 null로 설정하여이 작업을 수행했습니다.

connection.setRequestProperty(MY_HEADER, null); 
관련 문제