Htpp中web通讯发送post(上传文件)、get请求

一、正常发送post请求

1、引入pom文件

      <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5</version></dependency>
2、这个是发送至正常的post、get请求 
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
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.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;public class HttpClientUtils {private static final Logger logger = LogManager.getLogger(HttpClientUtils.class);//测试方法
//    public static void main(String[] args) throws IOException {
//        String url="htt";
//        String str = "{\"username\":\"111\",\"password\":\"Tx222\"}";
//        HashMap<String, String> map = new HashMap<>();
//        map.put("username", "111");
//        map.put("password", "222");
//     //   System.out.println(post(url,map));
//        System.out.println("===================================");
//        System.out.println(JSONObject.toJSONString(map));
//        System.out.println(post(url,JSONObject.toJSONString(map)));
//    }//data为 JSONObject.toJSONString(map)public static String post(String url, String data) throws IOException {
//        1、创建HttpClient对象HttpClient httpClient = HttpClientBuilder.create().build();
//        2、创建请求方式的实例HttpPost httpPost = new HttpPost(url);
//        3、添加请求参数(设置请求和传输超时时间)RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();httpPost.setConfig(requestConfig);httpPost.setHeader("Accept", "application/json");httpPost.setHeader("Content-Type", "application/json");
//        设置请求参数httpPost.setEntity(new StringEntity(data, "UTF-8"));
//        4、发送Http请求HttpResponse response = httpClient.execute(httpPost);
//        5、获取返回的内容String result = null;int statusCode = response.getStatusLine().getStatusCode();if (200 == statusCode) {result = EntityUtils.toString(response.getEntity());} else {logger.info("请求第三方接口出现错误,状态码为:{}", statusCode);return null;}
//        6、释放资源httpPost.abort();httpClient.getConnectionManager().shutdown();return result;}public static String get(String url,String token) throws IOException {
//        1、创建HttpClient对象HttpClient httpClient = HttpClientBuilder.create().build();
//        2、创建请求方式的实例HttpGet httpGet = new HttpGet(url);
//        3、添加请求参数(设置请求和传输超时时间)RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();httpGet.setConfig(requestConfig);httpGet.setHeader("Accept", "application/json");httpGet.setHeader("Content-Type", "application/json");//无需求可删除tokenhttpGet.setHeader("Authorization","Bearer "+token);
//        4、发送Http请求HttpResponse response = httpClient.execute(httpGet);
//        5、获取返回的内容String result = null;int statusCode = response.getStatusLine().getStatusCode();if (200 == statusCode) {result = EntityUtils.toString(response.getEntity());} else {logger.info("请求第三方接口出现错误,状态码为:{}", statusCode);return null;}
//        6、释放资源httpGet.abort();httpClient.getConnectionManager().shutdown();return result;}}

二、还有文件上传的需求 这个http5的我简单试了几种不会用 直接引用的之前第三方给的对接方法

        <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.9</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;/*** <p>** @author 花鼠大师* @version :1.0* @date 2024/4/12 15:10*/
@Slf4j
public class SendFileUtils {public static String sendMultipartFile(String url, File file) {//获取HttpClientCloseableHttpClient client = getHttpClient();HttpPost httpPost = new HttpPost(url);fillMethod(httpPost,System.currentTimeMillis());// 请求参数配置RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).setConnectionRequestTimeout(10000).build();httpPost.setConfig(requestConfig);String res = "";String fileName = file.getName();//文件名try {MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);/*** 假设有两个参数需要传输* 参数名:filaName 值 "文件名"* 参数名:file 值:file (该参数值为file对象)*///表单中普通参数builder.addPart("cardName ",new StringBody("来源", ContentType.create("text/plain", Consts.UTF_8)));// 表单中的文件参数 注意,builder.addBinaryBody的第一个参数要写参数名builder.addBinaryBody("card", file, ContentType.create("multipart/form-data",Consts.UTF_8), fileName);//ContentType contentType = ContentType.create("multipart/form-data",Charset.forName("UTF-8")); //此处也是坑,转发出去的filename依然为乱码builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, fileName);HttpEntity entity = builder.build();httpPost.setEntity(entity);HttpResponse response = client.execute(httpPost);// 执行提交if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 返回响应结果res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8"));}else {res = "响应失败";log.error("响应失败!");}return res;} catch (Exception e) {e.printStackTrace();log.error("调用HttpPost失败!" + e.toString());} finally {if (client != null) {try {client.close();} catch (IOException e) {log.error("关闭HttpPost连接失败!");}}}log.info("数据传输成功!!!!!!!!!!!!!!!!!!!!");return res;}private static CloseableHttpClient getHttpClient(){SSLContext sslContext = null;try {sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {return true;}}).build();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,NoopHostnameVerifier.INSTANCE);CloseableHttpClient client = HttpClientBuilder.create().setSSLSocketFactory(sslConnectionSocketFactory).build();return client;}/*** 添加头文件信息* @param requestBase* @param timestamp*/private static void fillMethod(HttpRequestBase requestBase, long timestamp){//此处为举例,需要添加哪些头部信息自行添加即可//设置时间戳,nginx,underscores_in_headers on;放到http配置里,否则nginx会忽略包含"_"的头信息requestBase.addHeader("timestamp",String.valueOf(timestamp));System.out.println(requestBase.getAllHeaders());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…

【C++】set和map的使用

set和map的使用 1.序列式容器和关联式容器1.1序列式容器:1.2关联式式容器: 2.set的使用2.1set和multiset参考文档2.2set类的介绍2.3set的构造和迭代器2.4set的增删查2.5multiset和set的差异 3map系列的使用3.1 map和multimap参考文档3.2map类的介绍3.3pair类型介绍3.4map的构造…

[LeetCode-Python版]206. 反转链表(迭代+递归两种解法)

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1…

快速上手Neo4j图关系数据库

参考视频&#xff1a; 【IT老齐589】快速上手Neo4j网状关系图库 1 Neo4j简介 Neo4j是一个图数据库&#xff0c;是知识图谱的基础 在Neo4j中&#xff0c;数据的基本构建块包括&#xff1a; 节点(Nodes)关系(Relationships)属性(Properties)标签(Labels) 1.1 节点(Nodes) 节点…

window.getSelection() 获取划线内容并实现 dom 追随功能

功能&#xff1a;鼠标对一段文本中某些文字进行划线之后&#xff0c;需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作&#xff0c;比如收藏、添加样本库等功能。 一、需要了解的鼠标事件对象属性 给 dom 元素注册鼠标事件之后&#xff0c;会有 event 属性&#…

2024安装hexo和next并部署到github和服务器最新教程

碎碎念 本来打算写点算法题上文所说的题目&#xff0c;结果被其他事情吸引了注意力。其实我之前也有过其他博客网站&#xff0c;但因为长期不维护&#xff0c;导致数据丢失其实是我懒得备份。这个博客现在部署在GitHub Pages上&#xff0c;github不倒&#xff0c;网站不灭&…

Chinese-Clip实现以文搜图和以图搜图

本文不生产技术&#xff0c;只做技术的搬运工&#xff01; 前言 目前网上能够找到的资料有限&#xff0c;要么收费&#xff0c;要么配置复杂&#xff0c;作者主打一个一毛不拔&#xff0c;决定自己动手实现一个&#xff0c;功能清单受启发于Nidia AI lab实验室的nanodb项目&am…

Android14 AOSP支持短按关机

修改frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java in…

Abaqus混凝土梁三点弯曲开裂模拟基于随机多边形骨料及界面过渡区模型

在细观混凝土开裂研究中&#xff0c;仿真可直观揭示混凝土中多相材料的破坏特征及微观裂缝的发展规律。本案例建立包含随机多边形粗骨料、界面过渡区&#xff08;ITZ&#xff09;及水泥砂浆在内的细观混凝土梁二维模型&#xff0c;对混凝土梁在三点弯曲工况下进行有限元模拟&am…

111.【C语言】数据结构之二叉树的销毁函数

目录 1.知识回顾 2.分析 3.代码 后序遍历销毁(最简洁) 前序遍历销毁(不推荐) 中序遍历销毁(不推荐) 4.将函数嵌入main函数中执行 1.知识回顾 106.【C语言】数据结构之二叉树的三种递归遍历方式 2.分析 销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

渗透测试之js利用

引言 在渗透测试中&#xff0c;js利用是一个非常重要的部分&#xff0c;作为一个网络安全人员&#xff0c;我也是经常利用到这一模块&#xff0c;首先&#xff0c;js是什么呢 什么是js JavaScript(简称js)&#xff0c;javascript和java虽然名字相似&#xff0c;但两个东西却…

请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配

vs版本升级时&#xff0c;编译时会出现上述问题&#xff0c;如原来在2017下编译的程序&#xff0c;后来改用2019&#xff0c;出现上述问题。需要在解决方案-通用属性-调试源文件下变更相应设置。

设计模式详解(十一):模板方法——Template Method

Template Method 设计模式 1. 概述 Template Method 是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并允许子类在不改变算法结构的前提下重新定义算法中的某些步骤。 在 Template Method 模式中&#xff1a; 父类&#xff08;抽象类&#xff09;定义了…

Airbus结构数字样机理念及实践(转)

关注作者 1、数字样机的背景 早期的设计文档通过二维工程图来描述&#xff0c;对工程师来说&#xff0c;绘制工程图足够表达设计思想&#xff0c;工程图成为了标准的“工程师语言”。但是外围的用户通常通过透视图来表达设计意图&#xff0c;不得不产生了大量针对不同教育背景…

ik分词器了解 和 通过zip安装包的方式 将ik分词器安装到elasticsearch中

目录 1. ik分词器的作用&#xff08;效果&#xff09; &#xff08;1&#xff09;标准分析器效果 &#xff08;2&#xff09;ik_smart分词 &#xff08;3&#xff09;ik_max_word分词 2. 首先根据自己的elasticsearch的版本下载对应的ik分词器版本 3. 将下载好的ik分词器…

【人工智能】网络安全技术及应用

文章目录 前言一、网络安全概念1、你是否了解以下网络安全事件&#xff1f;2、什么是网络安全&#xff1f;3、网络安全的核心要素4、网络安全、信息安全、数据安全三者的区别5、网络安全的重要性6、网络安全-法律法规7、网络安全-等级保护 二、常见的网络安全威胁和攻击1、网络…

计算机屏幕坐标系简介

计算机屏幕坐标系简介 计算机屏幕坐标系是用于描述计算机显示屏上点的位置的系统。它在图形编程、游戏开发、用户界面设计等多个领域中至关重要。因此&#xff0c;需要理解掌握。坐标系通常由两个维度&#xff08;二维坐标系&#xff0c;平面坐标系&#xff09;或三个维度&…

react源码探索之预先知识了解

最近快期末考试&#xff0c;本来不打算写博客的&#xff0c;但是一旦停下不知又是何年&#xff0c;或许是我工作之后&#xff0c;也或许是永远把。毕竟这只是用来记录我大学的殷实生活&#xff0c;大四我不再着重记录&#xff0c;而是投身于找工作。时光匆匆&#xff0c;重大一…

java 通过jdbc连接sql2000方法

1、java通过jdbc连接sql2000 需要到三个jar包&#xff1a;msbase.jar mssqlserver.jar msutil.jar 下载地址&#xff1a;https://download.csdn.net/download/sunfor/90145580 2、将三个jar包解压到程序中的LIB下&#xff1a; 导入方法&#xff1a; ①在当前目录下&#xff…