我本来在我本机写的代码,本机电脑是可以连外网没限制,对于https和http都可以。但是放在linux服务器上后,因为VM限制了不能访问外网,而且有ssl验证所以就一直报错,要么是连不上线上请求,要么是访问不了SSL 443端口,其实这2错一样。

package util_liyuan;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509ExtendedTrustManager;public class Tools {private static boolean proxySet = true;private static String proxyHost = "192.168.11.254";private static int proxyPort = 8080;public static final String GET_URL = "https://csc.pconline.com.cn/s/buy/search/getSkuByLink.xsp";public static void main(String[] args) {List<String> params = readFile02("E:\\360downloads\\111\\urls.txt");sendGet(params, proxySet);}//读取本地文件pos.txtpublic static List<String> readFile02(String path)  {// 使用一个字符串集合来存储文本中的路径 ,也可用String []数组List<String> list = new ArrayList<String>();try {FileInputStream fis = new FileInputStream(path);// 防止路径乱码   如果utf-8 乱码  改GBK     eclipse里创建的txt  用UTF-8,在电脑上自己创建的txt  用GBKInputStreamReader isr = new InputStreamReader(fis, "UTF-8");BufferedReader br = new BufferedReader(isr);String line = "";while ((line = br.readLine()) != null) {// 如果 t x t文件里的路径 不包含---字符串       这里是对里面的内容进行一个筛选list.add(line);}br.close();isr.close();fis.close();} catch (Exception e) {e.printStackTrace();}return list;}//设置请求头属性public static Map<String, String> setProperty() {HashMap<String, String> pMap = new HashMap<>();// pMap.put("Accept-Encoding", "gzip"); //请求定义gzip,响应也是压缩包pMap.put("connection", "Keep-Alive");pMap.put("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");pMap.put("Content-Type", "application/x-www-form-urlencoded");return pMap;}/*** GET请求* * @param url*            请求的URL* @param param*            请求参数,name1=value1&name2=value2 的形式* @return 响应结果*/public static StringBuffer sendGet( List<String> params, boolean isproxy) {//String result = "";BufferedReader in = null;StringBuffer sb = new StringBuffer();try {for (int i = 0; i < params.size(); i++) {URL realUrl = new URL(GET_URL+ "?buyLink=" + params.get(i));// 打开和URL之间的连接HttpURLConnection connection = null;if (isproxy) {// 使用代理模式@SuppressWarnings("static-access")Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));connection = (HttpURLConnection) realUrl.openConnection(proxy);} else {connection = (HttpURLConnection) realUrl.openConnection();}// https 忽略证书验证if (params.get(i).substring(0, 5).equals("https")) {SSLContext ctx = MyX509TrustManagerUtils();((HttpsURLConnection) connection).setSSLSocketFactory(ctx.getSocketFactory());((HttpsURLConnection) connection).setHostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}});}// 设置通用的请求属性for (Map.Entry<String, String> entry : setProperty().entrySet()) {connection.setRequestProperty(entry.getKey(), entry.getValue());}// 建立连接connection.connect();// 定义 BufferedReader输入流来读取URL的响应if (connection.getResponseCode() == HttpURLConnection.HTTP_OK|| connection.getResponseCode() == HttpURLConnection.HTTP_CREATED|| connection.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) {in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));} else {in = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));}//System.out.println(in);String line;while ((line = in.readLine()) != null) {if (line.contains("success")) {sb.append(GET_URL + "?buyLink=" + params.get(i)+"解析成功"+"\n");//jieguo.add(GET_URL + "?buyLink=" + params.get(i)+"解析成功");System.out.println((i+1)+GET_URL + "?buyLink=" + params.get(i)+"解析成功");}else {sb.append(GET_URL + "?buyLink=" + params.get(i)+"解析失败"+"\n");//jieguo.add(GET_URL + "?buyLink=" + params.get(i)+"解析失败");System.out.println((i+1)+GET_URL + "?buyLink=" + params.get(i)+"解析失败");}}}} catch (Exception e) {System.out.println("发送GET请求出现异常!");e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return sb;}/*** POST请求* * @param url*            发送请求的 URL* @param param*            请求参数 name1=value1&name2=value2 的形式* @param isproxy*            是否使用代理模式* @return 响应结果*/public static String sendPost(String url, String param, boolean isproxy) {OutputStreamWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);HttpURLConnection conn = null;if (isproxy) {// 使用代理模式@SuppressWarnings("static-access")Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));conn = (HttpURLConnection) realUrl.openConnection(proxy);} else {conn = (HttpURLConnection) realUrl.openConnection();}// httpsif (url.substring(0, 5).equals("https")) {SSLContext ctx = MyX509TrustManagerUtils();((HttpsURLConnection) conn).setSSLSocketFactory(ctx.getSocketFactory());((HttpsURLConnection) conn).setHostnameVerifier(new HostnameVerifier() {//在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}});}// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST"); // POST方法// 设置通用的请求属性for (Map.Entry<String, String> entry : setProperty().entrySet()) {conn.setRequestProperty(entry.getKey(), entry.getValue());}conn.connect();// 获取URLConnection对象对应的输出流out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");// 发送请求参数out.write(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应if (conn.getResponseCode() == HttpURLConnection.HTTP_OK|| conn.getResponseCode() == HttpURLConnection.HTTP_CREATED|| conn.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) {in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));} else {in = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "UTF-8"));}String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!");e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}// ===========================utils===================/*** url编码* * @param source*            待编码字符串* @param encode*            字符编码 eg:UTF-8* @return 编码字符串*/public static String urlEncode(String source, String encode) {String result = source;try {result = java.net.URLEncoder.encode(source, encode);} catch (UnsupportedEncodingException e) {e.printStackTrace();return "0";}return result;}/** HTTPS忽略证书验证,防止高版本jdk因证书算法不符合约束条件,使用继承X509ExtendedTrustManager的方式*/class MyX509TrustManager extends X509ExtendedTrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {// TODO Auto-generated method stub}@Overridepublic void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {// TODO Auto-generated method stub}@Overridepublic X509Certificate[] getAcceptedIssuers() {// TODO Auto-generated method stubreturn null;}@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1, Socket arg2) throws CertificateException {// TODO Auto-generated method stub}@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1, SSLEngine arg2)throws CertificateException {// TODO Auto-generated method stub}@Overridepublic void checkServerTrusted(X509Certificate[] arg0, String arg1, Socket arg2) throws CertificateException {// TODO Auto-generated method stub}@Overridepublic void checkServerTrusted(X509Certificate[] arg0, String arg1, SSLEngine arg2)throws CertificateException {// TODO Auto-generated method stub}}public static SSLContext MyX509TrustManagerUtils() {TrustManager[] tm = { new HttpsUtils().new MyX509TrustManager() };SSLContext ctx = null;try {ctx = SSLContext.getInstance("TLS");ctx.init(null, tm, null);} catch (Exception e) {e.printStackTrace();}return ctx;}}

  

转载于:https://www.cnblogs.com/sincoolvip/p/10756996.html

java使用代理请求https相关推荐

  1. Java使用SSLContext请求https链接

    Java使用SSLContext请求https链接 先了解几个关键类 SSLContext 安全套接字协议的实现核心类 SSLSocket 扩展自Socket用户客户端 SSLSocketFactor ...

  2. JAVA使用HttpURLConnection请求HTTPS网站,不需要证书验证的DEMO教程

    最近在获取一个购物网站商品,发现浏览器和postman每次都可以请求到内容,但是java代码尝试了各种方式都是Connection refused: connect,一开始以为是java代码的问题,后 ...

  3. Maven构建Java使用代理,请求API接口

    Maven构建Java使用代理,请求API接口 提示:代理请求访问,请合法使用,谢谢 环境: Maven:Maven官网 HuTool:HuTool官网 Java8: Java官网-Oracle Id ...

  4. java用HttpURLConnection发起HTTPS请求并跳过SSL证书,解决:unable to find valid certification path to requested targ

    java用HttpURLConnection发起HTTPS请求并跳过SSL证书 问题出现:unable to find valid certification path to requested ta ...

  5. java通过http方式代理请求api接口

    最近在对接客户那边第三方合作的http api接口的时候,发现通过java代码的方式请求第三方http接口,发现在我本地可以正常访问,但是把程序部署到客户那边的服务器上就发生超时,找不到访问地址的错误 ...

  6. Nodejs的https或axios使用代理请求

    折腾了大半天,搞定了nodejs中使用代理!! https模块的使用参考这个: socks-proxy-agent - npmA SOCKS proxy `http.Agent` implementa ...

  7. java发送get请求,并带上参数,HTTP和HTTPS都可以

    //java发送get请求,并带上参数public static String send_Get(String encode_data){CloseableHttpClient httpClient ...

  8. Tomcat高级部分-使用特定模块和软件反向代理请求到后端tomcat实现负载均衡和session保持...

    实验目标: 1.反向代理服务器将用户请求负载均衡到后端tomcat节点: 2.配置基于nginx的负载均衡,实现会话绑定: 3.配置基于mod_jk的负载均衡,实现会话绑定: 4.基于mod_prox ...

  9. Java 动态代理机制分析及扩展--转

    http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...

  10. Java 动态代理机制分析及扩展,第 1 部分

    引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...

最新文章

  1. react router路径的匹配原则
  2. 【译】ES2018 新特性: 正则表达式的 s (dotAll) 标志
  3. jzoj6309-完全背包【贪心,背包】
  4. Became Jane(成为简.奥斯丁)
  5. MFC开发上位机经验
  6. 计算机辅助翻译课程用书,计算机辅助翻译本科课程教学大纲翻译本科
  7. 在银行做数据是一种什么体验?
  8. [Matlab] subs 函数 将符号变量代入符号表达式不需要加引号
  9. redmon:Redis监控管理Web工具
  10. graphs菜单_Wireshark自带工具IO Graphs分析接收数据平滑度案例
  11. 毕业就业之 -【湖北集中选调】
  12. 快递单打印专家 免费
  13. proxifier for mac 破解版 v2.19
  14. 电子商务网站建设策划书_竞赛解析 | 全国大学生电子商务“创新、创意及创业”挑战赛...
  15. java 监控 emc 存储_EMC存储配置说明(转)
  16. C#多线程工业源码 替代传统plc搭载的触摸屏 工控屏幕一体机直接和plc通信
  17. 飞控和飞控固件的讲解
  18. 数据库应用——MySQL数据管理
  19. 论文翻译:2021_DeepFilterNet: A Low Complexity Speech Enhancement Framework for Full-Band Audio based on
  20. CGB2106-Day03

热门文章

  1. 【科普向】5G核心网架构和关键技术
  2. 豆瓣已玩烂,来爬点有逼格的 ——IMDB 电影提升你的品位
  3. 有了这套前端数据可视化框架,人人都能快速上手(赠100套前端可视化大屏模板)
  4. 三维空间的位姿描述和齐次变换
  5. Libcef源码下载与编译
  6. 软件测试组长要做的事情,测试组长的工作计划(共10篇).docx
  7. React-pdf:pdf预览插件实践
  8. 数据挖掘案例实战:利用LDA主题模型提取京东评论数据(四)
  9. OpenCV 直方图计算
  10. 5类6类7类网线对比_超6类7类8类网线进来挨打 6类线全面测评 网速和传输速率测试...