IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 使用HttpClient发送DELETE请求,支持带参数 -> 正文阅读

[网络协议]使用HttpClient发送DELETE请求,支持带参数

1.自定义HttpDelete类

HttpClient中DELETE请求,是没有办法带参数的。因为setEntity()方法是抽象类HttpEntityEnclosingRequestBase类里的方法,HttpPost继承了该类,而HttpDelete类继承的是HttpRequestBase类。所以是没有setEntity()方法的。

需要自己创建一个新类,然后照着HttpPost的抄一遍,让新类能够调用setEntity()方法

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import java.net.URI;

class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase {

    public static final String METHOD_NAME = "DELETE";

    /**
     * 获取方法(必须重载)
     *
     * @return
     */
    @Override
    public String getMethod() {
        return METHOD_NAME;
    }

    public HttpDeleteWithBody(final String uri) {
        super();
        setURI(URI.create(uri));
    }

    public HttpDeleteWithBody(final URI uri) {
        super();
        setURI(uri);
    }

    public HttpDeleteWithBody() {
        super();
    }
}

2.1 采用JSON方式(application/json)发送请求

import com.google.gson.Gson;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
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 static void main(String[] args) throws Exception{

    String url = "";// 地址
    Map<String,String> params = new HashMap<>();// 参数
    params.put("param1","");

    // 创建默认的httpClient实例.
    CloseableHttpClient httpClient = HttpClients.createDefault();

    //以delte方式请求
    HttpDeleteWithBody httpDelete = new HttpDeleteWithBody(url);

    // 设置请求头
    httpDelete.setHeader("Content-Type", "application/json;charset=UTF-8");
    httpDelete.setHeader("accept","application/json");

    //将参数以UTF-8编码并包装成表单实体对象
    StringEntity se = new StringEntity(new Gson().toJson(params), "UTF-8");
    se.setContentType("text/json");
    httpDelete.setEntity(se);

    // 执行请求
    CloseableHttpResponse response = httpClient.execute(httpDelete);

    // 获取返回值
    HttpEntity entity = response.getEntity();
    String result = EntityUtils.toString(entity, "UTF-8");
    System.out.println("打印结果:"+result);
}

2.2 采用表单方式(multipart/form-data)发送请求

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


public static void main(String[] args) throws Exception{
    String url = "";// 地址
    Map<String,String> params = new HashMap<>();// 参数
    params.put("param1","");

    // 创建默认的httpClient实例.
    CloseableHttpClient httpClient = HttpClients.createDefault();

    //以delte方式请求
    HttpDeleteWithBody httpDelete = new HttpDeleteWithBody(url);
    
    // 设置请求头
    // Content-Type设置成multipart/form-data,服务器反而取不到参数
    // 目前不清楚原因,猜测可能是使用了UrlEncodedFormEntity引起的
    // httpDelete.setHeader("Content-Type", "multipart/form-data");
    httpDelete.setHeader("accept","application/json");

    // 组织请求参数
    List<NameValuePair> paramList = new ArrayList <NameValuePair>();
    if(params != null && params.size() > 0){
        Set<String> keySet = params.keySet();
        for(String key : keySet) {
            paramList.add(new BasicNameValuePair(key, params.get(key)));
        }
    }
    httpDelete.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));

    // 执行请求
    CloseableHttpResponse response = httpClient.execute(httpDelete);

    // 获取返回值
    HttpEntity entity = response.getEntity();
    String result = EntityUtils.toString(entity, "UTF-8");
    System.out.println("打印结果:"+result);
}

参考地址:

https://blog.csdn.net/u012843873/article/details/106900612

使用HttpClient 发送 GET、POST(FormData、Raw)、PUT、Delete请求及文件上传 - iFindU_San - 博客园

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:46:48  更:2021-12-04 13:47:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 8:38:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码