如何从java执行https GET请求

2023-11-23

我写了一个Java客户端,它执行httpGET 请求没有任何问题。 现在我想修改这个客户端以便执行https获取请求。

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

private String executeGet(final String url, String proxy, int port)
        throws IOException, RequestUnsuccesfulException, InvalidParameterException {

    CloseableHttpClient httpclient = null;
    String ret = "";
    RequestConfig config;

    try {                       
        String hostname = extractHostname(url);
        logger.info("Hostname {}", hostname);

        HttpHost target = new HttpHost(hostname, 80, null);

        HttpHost myProxy = new HttpHost(proxy, port, "http");
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
                AuthScope.ANY,
                new UsernamePasswordCredentials(USERNAME, PASSWORD));

        httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();         
        config = RequestConfig.custom().setProxy(myProxy).build();


        HttpGet request = new HttpGet(url);
        request.setConfig(config);
        CloseableHttpResponse response = httpclient.execute(target, request);

        ...

我期待一个简单的修改,比如使用HttpsGet代替HttpGet但不,没有HttpsGet可用类。

修改此方法以处理的最简单方法是什么https获取请求?


这是我用 Java 编写的快速而肮脏的 https 客户端,它会忽略无效的证书并使用 BASIC 进行身份验证

import java.io.IOException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;

    public static HttpsURLConnection getConnection(boolean ignoreInvalidCertificate, String user, String pass, HttpRequestMethod httpRequestMethod, URL url) throws KeyManagementException, NoSuchAlgorithmException, IOException{
        SSLContext ctx = SSLContext.getInstance("TLS");
        if (ignoreInvalidCertificate){
            ctx.init(null, new TrustManager[] { new InvalidCertificateTrustManager() }, null);  
        }       
        SSLContext.setDefault(ctx);

        String authStr = user+":"+pass;
        String authEncoded = Base64.encodeBytes(authStr.getBytes());

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

        connection.setRequestMethod("GET");
        connection.setDoOutput(true);
        connection.setRequestProperty("Authorization", "Basic " + authEncoded);     

        if (ignoreInvalidCertificate){
            connection.setHostnameVerifier(new InvalidCertificateHostVerifier());
        }

        return connection;
    }

--

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

public class InvalidCertificateHostVerifier implements HostnameVerifier{
    @Override
    public boolean verify(String paramString, SSLSession paramSSLSession) {
        return true;
    }
}

--

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

/**
 * ignore invalid Https certificate from OPAM
 * <p>see http://javaskeleton.blogspot.com.br/2011/01/avoiding-sunsecurityvalidatorvalidatore.html
 */
public class InvalidCertificateTrustManager implements X509TrustManager{
    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    @Override
    public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException {

    }

    @Override
    public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException {
    }
}

也许这是你可以开始的事情。

当然,既然你有连接,你可以使用以下命令检索响应内容

InputStream content = (InputStream) connection.getInputStream();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从java执行https GET请求 的相关文章

随机推荐

  • Google 图表 - 仪表图动画不起作用

    我正在尝试使用 Google Graphs 创建一些 GAUGE 图表 我的目标是从 php 页面加载数据并自动刷新 我能够做到这一点 但是当刷新数据时 仪表线不是动画的 而是从新的重新绘制的 我希望看到这样的酷动画 https jsfid
  • Room 如何转换定制对象

    我是 Room 的新手 我不明白应该如何解决这个问题 我有一个实体Movie另一个实体称为 pcomingMovies Entity public class Movie PrimaryKey NonNull public String i
  • 对于 Internet 上的 WCF 服务来说,传输安全性是一种不好的做法吗?

    我有一个可通过 Internet 访问的 WCF 服务 它具有 wsHttpBinding 绑定和消息安全模式 并使用用户名凭据来验证客户端 msdn说我们应该在Internet场景中使用消息安全 因为它提供端到端的安全 而不是像传输安全那
  • 在 __del__ 中关闭/处理对象真的可以吗?

    我一直在思考如何用Python编写类 更具体地说 构造函数是如何实现的以及对象应该如何被销毁 我不想依赖 CPython 的引用计数来进行对象清理 这基本上告诉我应该使用 with 语句来管理我的对象生命周期 并且我需要一个显式的 clos
  • 如何在 java 8 中展平地图列表

    我有要求 我有地图列表 Men 1 Men 2 Women 3 Women 2 Boys 4 现在我需要将其设为 flatMap 使其看起来像 Gender countOfValues 在上面的例子中 输出将是 Men 3 Women 5
  • 在java中读取Excel工作表时出现NoSuchFieldError

    我遵循了使用 Apache POI XSSF 构建工作簿的简单指南 按照相同的指南 我能够编写 Excel 工作表 但是当尝试读取 Excel 工作表时 我收到代码后显示的错误 Code try FileInputStream file n
  • 反序列化集合时未调用 Setter

    我正在尝试使用 XmlSerializer 进行非常简单的序列化 public struct XmlPerson XmlAttribute public string Id get set XmlAttribute public strin
  • 使用 LINQ to SQL 存储图像:将字节数组或流转换为二进制

    我正在使用 LINQ to SQL 我的图像字段被视为二进制 当我需要渲染图像时 将 Binary 类型转换为 byte 您可以使用 Binary 对象的 ToArray 方法 并不是什么大问题 但是有人可以告诉我如何将 byte 或将对象
  • 为 PerSession WCF 服务调用两次静态构造函数

    无法理解为什么类型构造函数PerSession WCF 服务调用了两次 ConcurrencyMode is Multiple 只需启动五个同时执行相同 WCF 服务方法调用的客户端 在日志中我看到static构造函数被调用两次 第一次 3
  • 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

    我需要在 Fedora 24 机器上构建 Boost 1 62 和 1 63 但使用 GCC 4 9 3 或 GCC 5 4 0 取决于 CUDA 版本 这就是我需要旧编译器的原因 但是如果我按照中所述设置自定义 GCC 版本这个答案 an
  • 如何在Tensorflow 2.0中使用gradient_override_map?

    我正在尝试使用gradient override map与张量流2 0 有一个文档中的示例 我也将在这里用作示例 In 2 0 GradientTape可用于计算梯度 如下所示 import tensorflow as tf print t
  • 在 SDK 工具修订版 12 中启动 Android 模拟器

    我将 Android SDK 工具从修订版 11 更新到修订版 12 模拟器现在无法启动 当我尝试运行 emulator exe 时 我得到 无效的命令行参数 Files Android android sdk tools emulator
  • 为什么音频和视频事件不冒泡?

    我想知道为什么我的一些 Javascript 无法工作 直到我发现音频事件没有在 DOM 树中冒泡 例如这timeupdate event 是否有理由不让音频和视频标签的事件冒泡 事件冒泡存在的原因是为了解决哪个元素是事件的预期目标这一含糊
  • 序言。结构(复杂术语)和谓词,我真的不明白区别

    我是序言新手 我似乎无法理解结构和谓词之间的区别 真的有什么区别吗 在四处挖掘时 我发现有些人认为f X a X 是一个谓词 有些人认为嫉妒 X Y 爱 X Z 爱 Y Z 是一个结构 或一个复杂的术语 他们对我来说看起来几乎一样 有人愿意
  • Android 上使用 SoundPool 实现无缝循环?

    我尝试使用 SoundPool 类循环短 20kb 无间隙 ogg 文件 但在硬件测试时无法获得一致的结果 它总是使用模拟器完美播放 但当我在 Nexus 1 或 Samsumg Galaxy Tab 10 1 上进行测试时 每个循环点都会
  • 手动生成条令段

    我在 Symfony2 项目中使用 slugable 行为 但现在我想根据不同的文本 当前标题 旧标题 表单输入中的用户文本 为一个页面制作许多 slugs 并将其保留在另一个页面中桌子 我的问题是 如何手动使用任何文本的学说扩展 我到处都
  • 大数据读取子样本R

    我非常感谢您花时间阅读本文 我有一个 30GB 的超级文件 其中包含 600 万条记录和 3000 个 csv 格式的列 主要是分类数据 我想引导子样本进行多项回归 但事实证明 即使我的机器中有 64GB RAM 和两倍的交换文件 这个过程
  • 在 XHTML 1.1 中:元素“input”不能嵌套在元素“form”内。为什么?

    下面的代码在 XHTML 1 1 严格模式下是被禁止的
  • python 中仅按第一个空格分割字符串[重复]

    这个问题在这里已经有答案了 我有字符串例如 238 NEO Sports 我只想在first空间 输出应该是 238 NEO Sports 我能想到的一种方法是使用split 最后合并返回的最后两个字符串 有没有更好的办法 只需将计数作为第
  • 如何从java执行https GET请求

    我写了一个Java客户端 它执行httpGET 请求没有任何问题 现在我想修改这个客户端以便执行https获取请求 import org apache http HttpHost import org apache http auth Au