2011-06-14 12 views
3

HttpURLConnection을 사용하여 Java의 일부 매개 변수로 GET 요청을 수행하려고합니다. 그러나 나는 이것을 할 때마다 매번 400 : 나쁜 요청을받습니다. 작동하려면 무엇을 변경해야합니까?HttpURLConnection GET 요청으로 400 잘못된 요청 받기

내가 시도
String url = "http://www.awebsite.com/apath?p1=v1&p2=v2&p3=v3"; 
HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); 
conn.setDoInput(true); 
conn.setDoOutput(false); 
conn.setUseCaches(false); 
conn.setRequestMethod("GET"); 
conn.setRequestProperty("Host", "www.awebsite.com"); 
conn.setRequestProperty("User-Agent", "Mozilla/4.0"); 
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
conn.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); 
conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
conn.setRequestProperty("Keep-Alive", "115"); 
conn.setRequestProperty("Connection", "keep-alive"); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
StringBuilder data = new StringBuilder(); 
String s = ""; 
while((s = br.readLine()) != null) 
    data.append(s); 
String pageData = data.toString(); 

: 전체 쿼리 URLEncoder를 사용

  • (?를 후) 그냥 값에.
  • 콘텐츠 길이 헤더 설정.
  • 출력을 사용하고 쿼리를 출력으로 설정하도록 연결을 설정합니다.
+0

나만의 봇을 쓰고 있습니까? 왜 모질라를 복제하고 있습니까? –

+0

URL을 http://google.com으로 변경했는데 문제가 해결되었습니다. – hoipolloi

+0

@ The Elite Gentleman 일부 CGI에 필요한 cURL 문서를 읽으면서 User-Agent 용 Mozilla/4.0을 사용했습니다. 이상하게도, 내가 사용하고있는 컨텍스트가 다소 긴 쿼리를 가지고 있으며 작동하지 않는다. – DanielGibbs

답변

2

코드는 www.awebsite.com에 대한 연결을 열려고 시도하지만 호스트 필드에 대해 올바르지 않거나 잘못된 값인 www.google.com을 보냅니다. 이것은 HTTP 사양에서 허용되지 않습니다.

www.awebsite.com의 서버가 정확한 헤더 집합을 수신하여 요청을 처리 할 수 ​​있도록하려면이 문제를 해결해야합니다.

필수 링크는 : How to use java.net.URLConnection to fire and handle HTTP requests?

+1

죄송합니다. URL은 원래 호스트로 Google에서 매우 긴 URL이었습니다. 예를 들어 URL을 단순화했습니다. – DanielGibbs

+0

@DanieL, 그럼에도 나는 HTTP 요청이 잘 형성 될 것이라고 생각하지 않는다. 요청에 두 개의 '호스트'헤더가있을 것으로 판단됩니다. 나는 당신이'Host' 헤더와 관련된 줄을 제거해야한다고 생각합니다. –

+0

나는'Host' 헤더를 삭제하려고했지만 변경은하지 않았습니다. 내가 게시 한 링크의 코드도 사용했지만 동일한 오류가 발생합니다. – DanielGibbs

관련 문제