Apache http.client HTTPS请求绕过SSL证书校验

import com.alibaba.fastjson2.JSONObject;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;

import javax.net.ssl.SSLContext;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Apache http.client HTTPS请求绕过SSL证书校验
 *
 * @module
 * @author:lkl
 * @date: 2024-03-23
 */
public class ApacheHttpsUtil {

    /**
     * 绕过SSL证书校验GET请求
     * @param url
     * @return:
     * @Author: lkl
     * @date:
     */
    public static JSONObject doGet(String url) throws Exception {
        // 创建一个信任所有证书的SSLContext
        SSLContext sslContext = SSLContextBuilder.create()
                .loadTrustMaterial(new TrustStrategy() {
                    @Override
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        return true; // 忽略所有证书验证
                    }
                })
                .build();
        // 创建一个HttpClient实例,使用上述SSLContext
        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLContext(sslContext)
                .setSSLHostnameVerifier(new NoopHostnameVerifier()) // 忽略主机名验证
                .build();
        // 创建HttpGet请求
        HttpGet httpGet = new HttpGet(url);
        // 执行请求
        String responseBody = httpClient.execute(httpGet, new BasicResponseHandler());
        // 关闭HttpClient资源
        httpClient.close();
        return JSONObject.parseObject(responseBody);
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是使用 org.apache.http.client.methods 发送 POST 请求并返回字符串的示例代码: ```java import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class Main { public static void main(String[] args) throws Exception { // 创建 HttpClient CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建 HttpPost HttpPost httpPost = new HttpPost("http://example.com"); // 设置请求体 StringEntity requestEntity = new StringEntity("request body"); httpPost.setEntity(requestEntity); // 发送请求 CloseableHttpResponse response = httpClient.execute(httpPost); // 获取响应体 String responseBody = Entity.toString(response.getEntity()); // 打印响应体 System.out.println(responseBody); // 关闭 HttpClient httpClient.close(); } } ``` 注意:上面的示例代码中将请求发送到了 "http://example.com",请替换为实际的接口地址。 ### 回答2: org.apache.http.client.methods 是 Apache HttpClient 库中的一个类,用于发送 HTTP 请求。具体来说,在这个类中,我们可以使用HttpPost 类来发送 POST 请求Http请求是一种客户端与服务器之间的通信方式,其中POST 请求常用于向服务器提交数据。同时,POST 请求可以用于获取服务器的响应结果。 要发送 POST 请求并返回一个字符串,我们可以按照以下步骤进行: 1. 创建一个 DefaultHttpClient 对象,该对象是 HttpClient 类的实例,并用它来执行请求。 2. 创建一个HttpPost 对象,用于定义要发送的请求方式和 URL。 3. 创建一个名为NameValuePair 的列表,用于存储要发送的POST请求的参数。 4. 将参数列表添加到HttpPost 对象中。 5. 使用 DefaultHttpClient 对象执行 HttpPost 请求,将返回的结果保存在 HttpResponse 对象中。 6. 从 HttpResponse 对象中获取返回的结果,并将其转换为字符串。 下面是一个示例代码,演示如何使用 org.apache.http.client.methods 来发送 POST 请求并返回字符串: ```java import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.NameValuePair; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import java.util.ArrayList; import java.util.List; public class PostRequestExample { public static void main(String[] args) { String url = "http://example.com"; // 替换为要发送请求的 URL DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("param1", "value1")); // 添加 POST 请求的参数 try { httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); HttpResponse response = httpClient.execute(httpPost); // 获取返回的结果并转换为字符串 String responseString = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(responseString); // 输出返回的字符串结果 } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码演示了如何使用 org.apache.http.client.methods 发送 POST 请求并返回字符串结果。我们首先创建了一个 DefaultHttpClient 对象,然后实例化了 HttpPost 对象,并设置了要发送请求的 URL。接着,我们创建了一个参数列表,用于存储 POST 请求的参数,并将其添加到 HttpPost 对象中。最后,我们执行 HttpPost 请求,将返回结果保存在 HttpResponse 对象中,并将结果转换为字符串。 请注意,上述示例中的方法在 Apache HttpClient 4.x 版本中已经被弃用,推荐使用 HttpClientBuilder 来创建 HttpClient 对象。但是,上述示例代码仍然可以在 Apache HttpClient 4.x 版本中使用。 ### 回答3: org.apache.http.client.methods是Apache HttpClient库中的一个类,用于创建HTTP请求方法的对象。要发送POST请求并返回一个字符串,可以按照以下步骤进行: 1. 首先,创建org.apache.http.impl.client.CloseableHttpClient对象,这是Apache HttpClient库中的一个实现了HttpClient接口的类。可以使用HttpClients.createDefault()方法获取默认的CloseableHttpClient实例。 2. 接下来,创建org.apache.http.client.methods.HttpPost对象,表示POST请求方法。在构造方法中传入请求的URL地址。 3. 如果有需要,可以设置POST请求请求头信息。可以通过调用HttpPost对象的setHeader(String name, String value)方法来设置请求头参数。 4. 如果需要发送请求体数据,可以创建org.apache.http.entity.StringEntity对象,并将传入的字符串作为构造方法参数。然后,可以通过调用HttpPost对象的setEntity(HttpEntity entity)方法将请求体设置到POST请求中。 5. 调用CloseableHttpClient对象的execute(HttpUriRequest request)方法,将HttpPost对象作为参数,执行请求。该方法将返回org.apache.http.client.methods.CloseableHttpResponse对象。 6. 最后,从CloseableHttpResponse对象中获取响应结果。可以通过调用CloseableHttpResponse对象的getEntity()方法获取响应体。如果需要将响应体转换成字符串,可以使用org.apache.http.util.EntityUtils类的toString(HttpEntity entity, Charset defaultCharset)静态方法。 以上是使用org.apache.http.client.methods发送POST请求并返回字符串的基本步骤。根据实际需求,可能还需要进行异常处理、设置连接超时时间、关闭连接等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值