2009-09-15 3 views
6

문제점을 발견했습니다. 내가 연결하는 장치를 식별하기 위해 사용자 에이전트 헤더를 사용하는 서버가 있습니다. 하지만 HttpURLConnection을 사용하여 서버에 연결할 때 사용자 에이전트 헤더가 없지만 브라우저에 연결하면 올바른 사용자 에이전트가 전송됩니다.안드로이드의 HttpURLConnection이 올바른 사용자 에이전트 헤더를 보내지 않습니다.

테스트를 위해 요청시 발견 된 헤더로 응답하는 echo 서버를 사용하고 있습니다.

예 : User-Agent : Mozilla/5.0 (예 : Android 1.5, ko-fr, HTC Hero Build/CUPCAKE) AppleWebKit/528.5 이상 (Gecko와 같은 KHTML) 버전/3.1.2 모바일 사파리/525.20.1 Up.Link/6.3.1.20.06.3.1.20.0. 내가 URLConnection의와 코드로 연결할 때

는하지만 난 얻을 :

사용자 에이전트 : 사용할 수 없습니다.

우리는 내가 다른 행동을한다는 ​​것을 알고 있습니까? 브라우저와 동일한 방법으로 연결할 수 있습니까?

편집 : 무엇 내가 정말 필요로하는 사용자 에이전트 헤더뿐만 아니라이

, 나는 또한 어떤 특별한 헤더 (실제로는 X-업 subno)가 필요합니다. 이 머리글은 운영자의 APN에 의해 ​​추가되지만 헤더에 요청이 추가되지 않는다는 코드로 연결될 때도 있습니다. 브라우저에서

: browser http://bannergame.googlecode.com/files/device_browser.png

코드에서 : code http://bannergame.googlecode.com/files/device_code.png

감사합니다, 모든 클라이언트가 보낸 사용자 에이전트 헤더 해야하는

+1

과 같은 좀 더 많은 정보를 보내면 좋을 것입니다. 대부분의 HTTP 연결 라이브러리가 사용자 에이전트를 직접 보내지는 않지만, 자신의 의미있는 것을 추가 할 수 있도록 요청에 헤더를 추가하는 방법을 제공하십시오. –

+1

사용자 에이전트를 스니핑하는 것은 실제로 좋지 않습니다. 알 수없는 거짓 에이전트와 관련된 다양한 문제가 있습니다. 소프트웨어 차단 , 프록시 및 캐시가 있습니다. 특별한 안드로이드 지향 페이지를 원한다는 신호를 보내려면 다른 방법을 찾아야합니다. – bobince

답변

10

HTTP specification 상태. 그러나 서버가 원하는 방식으로 클라이언트를 식별해야한다고 명시하지는 않습니다. Android는 사양을 준수하므로 사용자가 할 수있는 일이 많지 않습니다.

가장 좋은 방법은 setRequestProperty() 메서드를 사용하여 요청에서 바람직한 사용자 에이전트 값을 얻는 것입니다. 작동한다는 보장은 없지만 가능성이 있습니다. 방법은 다음과 같은 방식으로 호출 할 필요가있다 :

connection.setRequestProperty("User-Agent","MyAppName/1.0"); 

주식 안드로이드 브라우저가 웹킷을 사용합니다. WebKit의 사용자 에이전트 문자열을 설정하려면 정적 값을 사용하거나 WebKit에서 사용자 에이전트 문자열을 읽어야합니다. 이 시도는하지 않았지만 WebKit 사용자 에이전트 문자열은 getUserAgentString() method of the WebSettings class을 통해 Android에서 사용할 수 있습니다.

+0

이것에 대해 알고 있지만 브라우저와 동일한 유형의 연결 문자열을 사용할 수는 있습니다. 사용 하시겠습니까?나는 사용자 에이전트를 스스로 하드 코딩하고 싶지 않다. 나는 장치 사용자 에이전트를 사용하고 싶다. –

+0

가능한 해결책을 포함하도록 답변을 업데이트했습니다. –

+5

@answer : HTTP 사양은 "must"가 아닌 "should"라는 단어를 사용합니다. 이것은 좋을 것이라고 나타내지 만, 당신은 "가정"하지 않습니다. @ 루카스 S : 브라우저가 아닐 때 왜 자신을 브라우저로 식별하고 싶습니까? –

-2

HttpURLConnection이 브라우저의 사용자 에이전트를 위장한 경우 잘못된 것입니다. 결국 브라우저가 아닙니다. "Java/1.6 (MacOS 10.5 ..."등

+0

3 년 후에 응답하는 이유는 무엇입니까? –

+1

@JeffreyBlattman 이것은 포럼이 아닌 질의 응답 사이트입니다. 추가 할 유용한 정보가있는 경우에만 답변을 게시하십시오. –

관련 문제