MrLuo93
一身气质范
采纳率61.1%
2017-08-31 06:07 阅读 3.2k
已采纳

Java获取http请求返回json格式数据异常

50

java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at com.elan.webservers.HttpRequestUtil.getHttp(HttpRequestUtil.java:64)
at com.elan.webservers.HttpRequestUtil.main(HttpRequestUtil.java:19)

一直提示连接超时, 请问下有什么解决的方法么?

// 开始连接请求
conn.connect(); //这行为异常提示行

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

14条回答 默认 最新

  • 已采纳
    mwb102919 过客00 2017-08-31 06:11

    将Socket超时时间改大一点就可以了

    点赞 评论 复制链接分享
  • shaobo7705601 伯乐_博 2017-08-31 06:23

    确保网络是通的,url可请求到。如果确保可以访问到,调大时间

    点赞 评论 复制链接分享
  • playboyanta123 show_code 2017-08-31 06:23

    你这是文不对题,跟请求json有啥关系,你这是服务器请求超时了,一个是你调试好自己的网络,确保网络没毛病,在一个在网络请求的代码里把
    超时时间设置为20秒以上,还有就是你要确保你要请求的服务器没毛病吧,看你上面说的估计大部分可能是服务器出错了,连不上了

    点赞 评论 复制链接分享
  • MrLuo93 一身气质范 2017-08-31 06:25

    网络没问题。 conn.setReadTimeout(3600000); // 设置超时时间为一小时 还是一样。

    java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at com.elan.webservers.HttpRequestUtil.getHttp(HttpRequestUtil.java:64)
    at com.elan.webservers.HttpRequestUtil.main(HttpRequestUtil.java:19)

    点赞 评论 复制链接分享
  • qq_21454973 我惠依旧 2017-08-31 06:27

    请求的地址对了,那请求带的参数对了?

    点赞 评论 复制链接分享
  • vane11 Vane11 2017-08-31 06:31

    如果还没解决的话,最好说一下 大致问题发生的背景,单看报错不容易找到问题

    点赞 评论 复制链接分享
  • qq_28215471 qq_28215471 2017-08-31 06:37

    你看下你请求的方式对不对,get请求去请求post方式的肯定是不行的。

    点赞 评论 复制链接分享
  • zy841958835 cloudyzhao 2017-08-31 06:43

    贴下 请求的代码 用得什么框架啥的

    点赞 评论 复制链接分享
  • zhle321 le8383 2017-08-31 07:03

    服务器中断,或者请求路径url出错

    点赞 评论 复制链接分享
  • weixin_40045911 梦染 2017-08-31 07:16

    路过.............

    点赞 评论 复制链接分享
  • MrLuo93 一身气质范 2017-08-31 07:54

    public static void main(String[] args) {
    // 调用的接口返回值地址
    String url = "http://www.souqiantu.com/api/site/getScore";
    getHttp(url, "POST", "45173837");
    }

    public static String getHttp(String urlStr, String getPare, String id) {
        String result = ""; // 返回值
    
        try {
            // 根据需求,需要传的参数
            Map<String, String> map = new HashMap<String, String>();
            // 职位id
            map.put("yl_jobId", id); 
            // 公钥(签名认证): MD5(timestamp+key) (见第四章-签名)
            map.put("public_key", "MD5(2017-03-22 16:29:31)"); 
            // 获取当前系统时间
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
            // yyyy-MM-dd HH:mm:ss 发起请求的时间。sqt服务器只接受1h(小时)内的请求,如果超时返回公钥错误。
            map.put("timestamp", df.format(System.currentTimeMillis())); 
            JSONObject obj = JSONObject.fromObject(map);
            System.out.println(obj);
    
            // 创建url资源, 我要调用的url
            URL url = new URL(urlStr);
            // 建立http连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置允许输出
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置不用缓存
            conn.setUseCaches(false);
            // 设置传递方式 (GET/POST)
            conn.setRequestMethod(getPare);
            // 设置维持长连接
            conn.setRequestProperty("Connection", "Keep-Alive");
            // 设置文件字符集:
            conn.setRequestProperty("Charset", "UTF-8");
            // 设置如果连接在30秒后还没有连接上就返回timeout异常 
    

    // conn.setConnectTimeout(10000);
    conn.setReadTimeout(3600000); // 设置超时时间为一小时
    // 转换为字节数组
    byte[] data = (obj.toString()).getBytes();
    // 设置文件长度
    conn.setRequestProperty("Content-Length", String.valueOf(data.length));
    // 设置文件类型和编码格式
    conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
    // 开始连接请求
    conn.connect(); // 异常提示行
    OutputStream out = conn.getOutputStream();
    // 写入请求的字符串
    out.write((obj.toString()).getBytes());
    out.flush();
    out.close();

            System.out.println("conn = " + conn.getResponseCode());
    
            // 请求返回的状态
            if (conn.getResponseCode() == 200) {
                System.out.println("连接成功");
                // 请求返回的数据
                try {
                    /*
                    InputStream in = conn.getInputStream();
                    String a = null;
                    byte[] data1 = new byte[in.available()];
                    in.read(data1);
                    // 转成字符串
                    a = new String(data1);
                    System.out.println("a" + a);
                    */
    
                    // 读取返回结果集  
                    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                    String line;
                    String line1 = "";
                    while ((line = br.readLine()) != null) {
                        line1 += line;
                        System.out.println(line + "444444444444");
                    }
                    JSONObject jsonObject = JSONObject.fromObject(line1);
    
                    // 获取json中某个对象  
                    JSONObject jsonStatus = JSONObject.fromObject(jsonObject.get("status").toString());
                    JSONObject jsonMsg = JSONObject.fromObject(jsonObject.get("msg").toString());
    
                    String jgStatus = jsonStatus.get("status").toString();
                    System.out.println(jsonStatus.get("status"));
    
                    String jgMsg = jsonMsg.get("msg").toString();
                    System.out.println(jsonMsg.get("msg"));
    
                    System.out.println("jgStatus" + jgStatus);
                    System.out.println("jgMsg" + jgMsg);
    
                    result = jgStatus + "\t" + jgMsg; // 返回的数据
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                System.out.println("no++");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    
    点赞 评论 复制链接分享
  • qq_21454973 我惠依旧 2017-08-31 08:31

    哥们,我用你的代码连接成功了啊.....
    {"timestamp":"2017-08-31 16:26:25","yl_jobId":"45173837","public_key":"MD5(2017-03-22 16:29:31)"}
    conn = 200
    连接成功
    {"status":0,"msg":"\u516c\u94a5\u9519\u8bef"}444444444444
    就是你JSON有问题,报了个net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of 0
    at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:544)
    at net.sf.json.JSONObject.(JSONObject.java:1002)
    at net.sf.json.JSONObject.fromJSONTokener(JSONObject.java:714)
    at net.sf.json.JSONObject.fromString(JSONObject.java:481)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:430)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:386)
    at com.yzx.crbt.utils.test3.getHttp(test3.java:99)
    at com.yzx.crbt.utils.test3.main(test3.java:19)
    这个错误
    .....不明觉厉啊.....

    点赞 评论 复制链接分享
  • vane11 Vane11 2017-08-31 09:04

    感觉可能是路由ip被限制 或者是防火墙之类的问题,可以先查查防火墙问题

    点赞 评论 复制链接分享
  • MrLuo93 一身气质范 2017-08-31 09:35

    谢谢大家帮忙 , 搞定了, 我换了种方式。 就不一一谢谢大家了。

    点赞 评论 复制链接分享

相关推荐