2011-08-07 2 views
0

는이 같은 HTTP 요청에 대한 사용자 에이전트를 설정하려고 :Java http User-Agent를 설정할 수없는 이유는 무엇입니까?

public BufferedReader readURL(String url){ 
     URL urlcon; 
     BufferedReader in = null; 
     try { 
      urlcon = new URL(url); 
      connection = (HttpURLConnection)urlcon.openConnection(); 

      System.setProperty("http.agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"); 
      connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"); 
      System.out.println(connection.getHeaderField("User-Agent")); 
      connection.connect(); 
      in = new BufferedReader(
            new InputStreamReader(
             connection.getInputStream())); 

      String header = connection.getHeaderField(0); 
      System.out.println(header); 
      System.out.println("---Start of headers---"); 
      int i = 1; 
      while ((header = connection.getHeaderField(i)) != null) { 
       String key = connection.getHeaderFieldKey(i); 
       System.out.println(((key==null) ? "" : key + ": ") + header); 
       i++; 
      } 
      System.out.println(connection.getHeaderField("http.agent")); 
      System.out.println("---End of headers---"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return in; 
    } 

그리고 내가 얻은 것은 사용자 에이전트 널 (null) :


HTTP/1.0 200 OK
--- 시작 헤더 ---
서버 : 아파치
캐시 제어 : 최대 사용 기간 = 10
만료 : 2011년 (일) 8월 7일을 그리니치 표준시 16시 09분 26초
비바리 : 수락 - 인코딩
을의 Content-Type : text/html과
콘텐츠 길이 : 163,582
날짜 : 2011년 (일) 8월 7일 그리니치 표준시 16시 09분 20초
X-니스 : 889,692,780 889,684,459
나이 : 4
연결 : 연결 유지
X-bip (빨리) : 889,692,780 70 148
통해 1.1 CachOS

--- 헤더의 끝 ---


가 왜 사용자 에이전트를 설정할 수 없습니다?

+1

가능한 중복 [A HttpURLConnection의의 헤더를 수정하는 방법 (http://stackoverflow.com/questions/480153/how-to-modify-the-header-of-a-httpurlconnection) –

+0

나는이 다른 주제를 따르려고 노력했지만 아무것도 작동하지 않습니다. JDK 1.6 업데이트 24를 사용합니다. – Felipe

답변

3

setRequestProperty가 아닌 setHeader()를 사용하십시오.

+4

미안하지만이 setHeader()를 어디서 구할 수 있습니까? URLConnection 클래스를 사용하고 있습니다. – Felipe

0

서버가 헤더 정보를 반환합니다. 나는 "User-Agent"가 돌아올만큼 중요하지 않다고 생각합니다. 반환되지 않았다고해서 전송되지 않는다는 것을 의미하지는 않습니다.

헤더 정보를 표시하는 작은 도구 (ieHTTPHeader)가 있습니다. 이 페이지에서 새로 고침을하면 전송되고 반환 된 첫 번째 헤더 집합이됩니다.

GET/questions/6973981/why-cant-i-set-java-http-user-agent HTTP/1.1
수락 : /
리퍼러 : https://stackoverflow.com/questions/tagged/java?page=2&sort=newest&pagesize=15
을 수락 - 언어 : EN-CA
사용자 에이전트 : Mozilla/4.0 (호환; MSIE 8.0; 윈도우 NT 5.1, 트라이던트/4.0)
수락 - 인코딩 : gzip을 , 수축
호스트 :
연결 : Keep-Alive
쿠키 : __utmc = 140029553; __utma = 140029553.1370458634.1310761265.1312727448.1312739618.123; __utmz = 140029553.1312739618.123.123.utmcsr = google | utmccn = (유기농) | utmcmd = 유기성 | utmctr = yahoo % 20finance % 20api % 20java; __qca = P0-1025379872-1310761265343; m = 4; usr = t = cEyCYO7bXECF &s = X6DJTj5kuY8H; __utmb = 140029553.15.10.1312739618

HTTP/1.1 200 OK
캐시 제어 : public, max-age = 60
Content-Type : text/html; 문자셋 = UTF-8
콘텐츠 인코딩 : 2011년 (일) 8월 7일는 18시 25분 43초는 GMT
는 마지막으로 수정 : 2011년 8월 7일 (일) 그리니치 표준시 18시 24분 43초
비바리 : gzip을
이 만료 *
을 날짜 : 일, 그리니치 표준시 18시 24분 42초
콘텐츠 길이 2011 8월 7일 : 12040

+0

답변 해 주셔서 감사합니다.하지만 상담원은 올바른 문자열입니까? "http.agent"또는 "User-Agent"? – Felipe

+0

결과는''User-Agent "'를 보여 주므로 추측 할 수 있습니다. – camickr

+0

나는 그것을 얻었다. .. 고마워.. 그러나이 경우 나는 헤더를 설정하고있다. .. 나는 그것을 보지 않아야 하느냐? 나는 다른 웹 사이트 URL로 tryed했다. 그리고 같은 .. 사용자 에이전트를 null로 표시한다. – Felipe

0

설정 시스템 등록 정보 "http.agent"연결 헤더 변경됩니다 : "사용자 에이전트"하지만 알이 according to documentation 귀하의 자바 버전은 여전히 ​​그것에 쓰여 있습니다 :

(210 개)

기타 HTTP 속성

http.agent

(기본값은 "자바 /") 는 HTTP 요청에서 사용자 에이전트 요청 헤더에 전송 된 문자열을 정의합니다.

속성에 제공된 문자열에 "Java /"문자열이 추가됩니다 (예 : -Dhttp.agent = "foobar"가 사용되는 경우 User-Agent 헤더에 "foobar Java/1.5.0 "VM 버전이 1.5.0 인 경우). 이 속성은 시작시 한 번만 검사됩니다. 먼저 첫 번째 URL을 생성하고 연결보다 속성을 설정할 수 있도록 속성, 시작시 한 번만 선택되어 있는지

알 수 있습니다.

적절한 헤더가 전송되는지 확인하려면 "tcpdump"을 사용할 수 있습니다. 사용법 :

tcpdump -n dst host stackoverflow.com -vvvv 
관련 문제