2017-10-10 21 views
1

Google TrendsからHTTPを使用してJSON応答を取得しようとしています。これは私のコードスニペットです:(Java)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 

、Googleは私に問題はないとのJSONファイルを提供します。しかし、Javaを使用してそのURLにアクセスしようとすると、悪い要求が与えられます。どうすればこの問題を解決できますか?前もって感謝します。

+0

URL文字列の二重引用符をスラッシュでエスケープしないでください。一重引用符を使用して何が起こるかを確認してください。 –

+0

@ DanielH.J。私はちょうどそれを試して、それは動作しませんでした –

+0

私はこの権利を読んでいる場合は、あなたのコードがブラウザに出力するURLを貼り付けているときに開いていると言っている? – fuzzyblankey

答えて

3

URLを入力する必要があります。URLのクエリ文字列部分をエンコードします。これを達成するためのいくつかの方法についてはthis question/answerをチェックしてください。

1

私はあなたの問題を解決しました。私はhiguchを推奨する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とレスポンスコードを出力します。

関連する問題