Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)HTTP GET请求不断获得400个响应代码,尽管该链接在浏览器中运行良好_Java_Rest_Http_Httpurlconnection - Fatal编程技术网

(Java)HTTP GET请求不断获得400个响应代码,尽管该链接在浏览器中运行良好

(Java)HTTP GET请求不断获得400个响应代码,尽管该链接在浏览器中运行良好,java,rest,http,httpurlconnection,Java,Rest,Http,Httpurlconnection,我正在尝试使用HTTP从Google Trends获取JSON响应。这是我的代码片段: 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\":[{\"

我正在尝试使用HTTP从Google Trends获取JSON响应。这是我的代码片段:

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 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

如果我直接在浏览器中键入URL,Google会毫无问题地给我一个JSON文件。然而,如果我试图使用Java访问该URL,我会收到一个错误的请求。我怎样才能解决这个问题?提前感谢。

您需要对URL的查询字符串部分进行URL编码。查看一些实现此目的的方法。

您需要对URL的查询字符串部分进行URL编码。查看一些实现此目的的方法。

我解决了您的问题。我强烈建议构建在ApacheHTTPAPI上

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);
}
私有静态最终HttpRequest请求=
HttpRequestBuilder.createGet(“https://trends.google.com/trends/api/explore“,String.class)
.addDefaultRequestParameter(“hl”、“en-US”)
.addDefaultRequestParameter(“tz”,“240”)
.responseDeserializer(responseDeserializer.ignorableDeserializer())
.build();
公共无效发送(){
ResponseHandler ResponseHandler=REQUEST.execute(“req”、“{”comparisonItem\”:[{”关键字“:”麦莉“,”地理“:”美国“,”时间“:”2012-01-01 2014-01-01-01\”,“{”关键字“:”汉娜·蒙塔纳“,”地理“:”美国“,”时间“:”2012-01-01-01 2014-01-01\”,”类别“:”0,“,”财产“:”;
System.out.println(responseHandler.getStatusCode());
responseHandler.ifHasContent(System.out::println);
}

代码将打印您通过浏览器获得的响应代码200和响应正文。

我解决了您的问题。我强烈建议构建在ApacheHTTPAPI上

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);
}
私有静态最终HttpRequest请求=
HttpRequestBuilder.createGet(“https://trends.google.com/trends/api/explore“,String.class)
.addDefaultRequestParameter(“hl”、“en-US”)
.addDefaultRequestParameter(“tz”,“240”)
.responseDeserializer(responseDeserializer.ignorableDeserializer())
.build();
公共无效发送(){
ResponseHandler ResponseHandler=REQUEST.execute(“req”、“{”comparisonItem\”:[{”关键字“:”麦莉“,”地理“:”美国“,”时间“:”2012-01-01 2014-01-01-01\”,“{”关键字“:”汉娜·蒙塔纳“,”地理“:”美国“,”时间“:”2012-01-01-01 2014-01-01\”,”类别“:”0,“,”财产“:”;
System.out.println(responseHandler.getStatusCode());
responseHandler.ifHasContent(System.out::println);
}

代码将打印您通过浏览器获得的响应代码200和响应正文。

您能否尝试不反斜杠转义url字符串中的双引号?尝试使用单引号,看看会发生什么?@DanielH.J。我刚试过,但没有成功如果我读对了,你是说当你把代码输出的URL粘贴到浏览器中时,它会打开?@fuzzyblankey是的,你能试着不反斜杠转义URL字符串中的双引号吗?尝试使用单引号,看看会发生什么?@DanielH.J。我刚试过,但没有成功如果我读对了,你是说当你将代码输出的URL粘贴到浏览器时,它会打开?@fuzzyblankey是的