2017-10-10 4 views
1

HTTP를 사용하는 Google 트렌드에서 JSON 응답을 받으려고합니다.(자바) 브라우저에서 완벽하게 작동하는 링크에도 불구하고 HTTP GET 요청이 400 응답 코드를 계속받습니다.

public class TestClass { 
    public static void main(String[] args) throws Exception{ 

    String address = "https://trends.google.com/trends/api/explore?hl=en-US&tz=240&req={\"comparisonItem\":[{\"keyword\":\"Miley\",\"geo\":\"US\",\"time\":\"2012-01-01 2014-01-01\"},{\"keyword\":\"Hannah Montana\",\"geo\":\"US\",\"time\":\"2012-01-01 2014-01-01\"}],\"category\":0,\"property\":\"\"}"; 

    URL url = new URL(address); 

    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

    con.setRequestMethod("GET"); 

    int responseCode = con.getResponseCode(); 

    System.out.println("URL is "+address); 

    System.out.println("Response code is " + responseCode); } 
} 

이 출력은 다음과 같습니다 : 이것은 내 코드입니다 내 브라우저에 URL을 직접 입력하면

URL is https://trends.google.com/trends/api/explore?hl=en-US&tz=240&req={"comparisonItem":[{"keyword":"Miley","geo":"US","time":"2012-01-01 2014-01-01"},{"keyword":"Hannah Montana","geo":"US","time":"2012-01-01 2014-01-01"}],"category":0,"property":""} 

Response code is 400 

, 구글은 나에게 아무 문제가있는 JSON 파일을 제공합니다. 그러나 Java를 사용하여 해당 URL에 액세스하려고하면 잘못된 요청이 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.

+0

URL 문자열의 큰 따옴표를 역 슬래시로 이스케이프하지 않으실 수 있습니까? 작은 따옴표를 사용하여 어떤 일이 일어나는지보십시오. –

+0

@ DanielH.J. 방금 시도했지만 작동하지 않았습니다. –

+0

제가이 권리를 읽고 있다면 코드가 브라우저에 출력하는 URL을 붙여 넣을 때 열리는 것입니까? – fuzzyblankey

답변

3

URL 필요 URL의 검색어 문자열 부분을 인코딩합니다. 이를 달성하기위한 몇 가지 방법은 this question/answer을 확인하십시오.

1

나는 당신의 문제를 해결했다. 안녕하세요, http-request은 apache http api에 내장되어 있습니다.

private static final HttpRequest<String> REQUEST = 
     HttpRequestBuilder.createGet("https://trends.google.com/trends/api/explore", String.class) 
       .addDefaultRequestParameter("hl", "en-US") 
       .addDefaultRequestParameter("tz", "240") 
       .responseDeserializer(ResponseDeserializer.ignorableDeserializer()) 
       .build(); 

public void send() { 
    ResponseHandler<String> responseHandler = REQUEST.execute("req", "{\"comparisonItem\":[{\"keyword\":\"Miley\",\"geo\":\"US\",\"time\":\"2012-01-01 2014-01-01\"},{\"keyword\":\"Hannah Montana\",\"geo\":\"US\",\"time\":\"2012-01-01 2014-01-01\"}],\"category\":0,\"property\":\"\"}"); 
    System.out.println(responseHandler.getStatusCode()); 
    responseHandler.ifHasContent(System.out::println); 
} 

이 코드는 브라우저에서받은 응답 코드 200과 응답 본문을 인쇄합니다.

관련 문제