Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 从url下载json文件时连接超时_Java_Json_Httpconnection - Fatal编程技术网

Java 从url下载json文件时连接超时

Java 从url下载json文件时连接超时,java,json,httpconnection,Java,Json,Httpconnection,我试图从以下URL下载JSON文件:在Java中,但我总是遇到一个异常: HTTP状态500-服务器为URL返回了HTTP响应代码405:http://map01.eniro.no/search/search.json 类型异常报告 消息服务器为URL返回了HTTP响应代码405:http://map01.eniro.no/search/search.json 说明服务器遇到内部错误,无法满足此请求。 例外 java.io.IOException:服务器返回了URL:http://map01.e

我试图从以下URL下载JSON文件:在Java中,但我总是遇到一个异常:

HTTP状态500-服务器为URL返回了HTTP响应代码405:http://map01.eniro.no/search/search.json
类型异常报告
消息服务器为URL返回了HTTP响应代码405:http://map01.eniro.no/search/search.json
说明服务器遇到内部错误,无法满足此请求。
例外
java.io.IOException:服务器返回了URL:http://map01.eniro.no/search/search.json
sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)
java.lang.reflect.Constructor.newInstance(未知源)
sun.net.www.protocol.http.HttpURLConnection$10.run(未知源)
sun.net.www.protocol.http.HttpURLConnection$10.run(未知源)
java.security.AccessController.doPrivileged(本机方法)
sun.net.www.protocol.http.HttpURLConnection.getChainedException(未知源)
sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知源)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源)
callURL(MainServlet.java:108)
doGet(MainServlet.java:71)
javaservlet.http.HttpServlet.service(HttpServlet.java:622)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
java.io.IOException:服务器返回了URL:http://map01.eniro.no/search/search.json
sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知源)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源)
java.net.HttpURLConnection.getResponseCode(未知源)
callURL(MainServlet.java:102)
doGet(MainServlet.java:71)
javaservlet.http.HttpServlet.service(HttpServlet.java:622)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是我完成这项任务的职责。我尝试了很多不同的方法来解决这个问题,但我总是得到相同的结果。我没有太多的HTTP连接编程经验,所以我需要帮助

public static void callURL()引发IOException{
URL obj=新URL(“http://map01.eniro.no/search/search.json");
HttpURLConnection con=(HttpURLConnection)obj.openConnection();
con.setRequestMethod(“POST”);
con.setRequestProperty(“用户代理”、“Mozilla/5.0(Windows NT 6.3;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/43.0.2357.124 Safari/537.36”);
con.setRequestProperty(“接受语言”,“pl;q=0.8”);
字符串urlParameters=“?index=yp&profile=pl&q=małopolskie&sortOrder=default&pageSize=5”;
//发送邮寄请求
con.设置输出(真);
DataOutputStream wr=新的DataOutputStream(con.getOutputStream());
writeBytes(URL参数);
wr.flush();
wr.close();
int responseCode=con.getResponseCode();
System.out.println(“\n向URL发送'POST'请求:“+myURL”);
System.out.println(“Post参数:+urlParameters”);
System.out.println(“响应代码:“+responseCode”);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(con.getInputStream());
字符串输入线;
StringBuffer响应=新的StringBuffer();
而((inputLine=in.readLine())!=null){
追加(inputLine);
}
in.close();
System.out.println(response.toString());
}
更新:

我通过Fiddler应用程序检查我的http请求,发现其中有一个错误:

'格式不正确的请求行。abs_路径为空(例如,缺少/)。RFC2616'


这是什么意思?我认为这个请求是正确的,因为在浏览器中我可以阅读这个json。

405是
方法不允许的。查询字符串上有参数这一事实表明,您应该执行
GET
而不是
POST

我会试着换衣服
con.setRequestMethod(“POST”)
con.setRequestMethod(“GET”)

当您想从服务器获取某些内容时,您应该发出
get
请求,而不是
POST

试试这个

private static JSONObject getResult() throws JSONException {

        String uri = "http://map01.eniro.no/search/search.json?index=yp&profile=pl&q=ma%C5%82opolskie&sortOrder=default&pageSize=5";

        JSONObject jsonResponse = null;
        try {
            URL url = new URL(uri);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-Type", "application/json");

            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + conn.getResponseCode());
            }

            BufferedReader br = new BufferedReader(new InputStreamReader(
                    (conn.getInputStream())));

            String jsonResponseString = br.readLine();

            jsonResponse = new JSONObject(jsonResponseString);

            conn.disconnect();

        } catch (MalformedURLException e) {

        } catch (IOException e) {

        } catch (JSONException ex) {

        }
        System.out.println("res: " + jsonResponse);
        return jsonResponse;
    }

我认为url调用不支持post。不幸的是,没有帮助;/仍然有超时错误。我想知道为什么它不适合你。我个人在我的机器上为上面的uri执行了相同的代码,并给出了相应的JSON。这并不能解决我的问题。但我想知道服务器是否可能有某种保护?更改POST以获取后出现了什么错误?现在还是完全一样还是有点不同?还是一样。但是我发现问题出在哪里了。我在请求头中添加了“连接”-“保持活动”,现在它可以工作了。感谢您的时间:)