在Linux下服务器获取用户openid报错
发布于 6 年前 作者 djin 7184 次浏览 来自 问答

在自己的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();

    }

1 回复

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

回到顶部