收藏
回答

在Linux下服务器获取用户openid报错


在自己的windows电脑上可以向微信提供的地址发送请求获取到openid,但是项目部署到Linux上以后会出现java.net.UnknownHostException: api.weixin.qq.com这个错误。我在Linux上ping api.weixin.qq.com是可以ping通的,而且昨天下午还没这个问题,晚上忽然就开始报这个错误。

下面是Java发送请求的代码(requestUrl为官方提供的,requestMethod为GET,报错的地方为下面httpUrlConn.connect()那里):

public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {

        StringBuffer buffer = new StringBuffer();

        try {

            // 创建SSLContext对象,并使用我们指定的信任管理器初始化

            TrustManager[] tm = { new MyX509TrustManager() };

            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");

            sslContext.init(null, tm, new java.security.SecureRandom());

            // 从上述SSLContext对象中得到SSLSocketFactory对象

            SSLSocketFactory ssf = sslContext.getSocketFactory();


            URL url = new URL(requestUrl);

            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();

            httpUrlConn.setSSLSocketFactory(ssf);


            httpUrlConn.setDoOutput(true);

            httpUrlConn.setDoInput(true);

            httpUrlConn.setUseCaches(false);

            // 设置请求方式(GET/POST)

            httpUrlConn.setRequestMethod(requestMethod);


            if ("GET".equalsIgnoreCase(requestMethod))

                httpUrlConn.connect();


            // 当有数据需要提交时

            if (null != outputStr) {

                OutputStream outputStream = httpUrlConn.getOutputStream();

                // 注意编码格式,防止中文乱码

                outputStream.write(outputStr.getBytes("UTF-8"));

                outputStream.close();

            }


            // 将返回的输入流转换成字符串

            InputStream inputStream = httpUrlConn.getInputStream();

            System.out.println("inputStream is null? "+(inputStream==null));

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


            String str = null;

            while ((str = bufferedReader.readLine()) != null) {

                buffer.append(str);

            }

            bufferedReader.close();

            inputStreamReader.close();

            // 释放资源

            inputStream.close();

            inputStream = null;

            httpUrlConn.disconnect();

        } catch (ConnectException ce) {

        System.out.println("connection Exeception");

        System.out.println(ce.getMessage());

        ce.printStackTrace();

        } catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchProviderException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (KeyManagementException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

        return buffer.toString();

    }


最后一次编辑于  2019-06-11
回答关注问题邀请回答
收藏

1 个回答

  • 铭锋科技
    铭锋科技
    2019-06-11

    看这段代码后,感觉java真麻烦

    2019-06-11
    赞同
    回复 1
    • guomz
      guomz
      2019-06-11

      也可以简单的写,这个代码是一个我听的一个网课的老师写的。

      2019-06-11
      回复
登录 后发表内容