专栏首页晏霖Java发送HTTP 请求

Java发送HTTP 请求

前言

请求http的Demo是个人亲测过,目前该方式已经在线上运行着。因为是http请求,所有发送post 和get 请求的demo都有在下方贴出,包括怎么测试,大家可直接 copy到自己的项目中使用。

正文

使用须知

为了避免大家引错包我把依赖和涉及到包路径给大家

import java.net.HttpURLConnection;
import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;


import com.fasterxml.jackson.databind.ObjectMapper;<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpcore</artifactId>
	<version>4.4.8</version>
</dependency>
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.3</version>
</dependency>

HTTP 发送 get 请求

首先我们引入两个包

发送get请求的工具类,可直接 copy 使用即可

另外,我抛出异常的代码大家改成自己业务的异常,不需要就删除掉。

参数说明:

host:ip

servUri:url

reString:参数

public static String getHttpData(String host, String servUri, String reString) throws Exception {
	StringBuffer sb = new StringBuffer();
	sb.append("getHttpData:host:" + host + ",servUri:" + servUri + ",reString:" + reString);	String strResp = null;
	try {
	URI uri = new URIBuilder().setScheme("http").setHost(host).setPath(servUri)
		.setParameter("strInfo", reString).build();
		HttpGet httpGet = new HttpGet(uri);
		CloseableHttpClient client3 = HttpClients.createDefault();
		HttpResponse resp;
		resp = client3.execute(httpGet);
		if (resp.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
		strResp = EntityUtils.toString(resp.getEntity());
		logger.info("the return result:{}", strResp);
		} else {
		logger.info("Error Response:", resp.getStatusLine().toString());
		throw new CommonBusinessException(CommonConstants.TASK_RELEASE_WCF,
				CommonConstants.TASK_RELEASE_WCF_DESC);
		}
		} catch (Exception e) {
		logger.error(sb.toString() + ":" + e.getMessage(), e.getCause());
		throw new CommonBusinessException(CommonConstants.TASK_RELEASE_WCF, CommonConstants.TASK_RELEASE_WCF_DESC);
		}
		return strResp;
	}

HTTP 发送 post 请求

发送post分两种,我分两种的原因是为了让大家方便,想传对象和 json 可以直接复制过用就可以用,不用你们在转了。

第一种是直接接收json

参数明说:

url:url

json:参数

public static String doPostData(String url, String json) throws Exception {
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
String result = "";
HttpResponse res = null;
try {
	StringEntity s = new StringEntity(json.toString(), "UTF-8");
	s.setContentType("application/json");
	post.setHeader("Accept", "application/json");
	post.setHeader("Content-type", "application/json; charset=utf-8");
	post.setEntity(s);
	res = client.execute(post);
	if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
		result = EntityUtils.toString(res.getEntity());
		return HttpStatus.SC_OK + "";
	}
	} catch (Exception e) {
	if(res == null) {
		return "HttpResponse 为 null!";
		}
		throw new RuntimeException(e);
	}
	if(res == null || res.getStatusLine() == null) {
		return "无响应";
	}
	return res.getStatusLine().getStatusCode() + "";
}
测试
@Test
    public void test12() throws Exception {
        String HOST = "http://eipwcf.aspirecn.com/SvcEF/Service1.svc/WCF_EF_MSA_GetDataInfo_P";
        HttpClient client = new HttpClient();
        JSONObject json = new JSONObject();
        json.put("msgId", msgId);
        String reslut=client.doPostData(HOST, json);
    }

第二种是参数是对象

参数说明:

url:url

tram:对象

public static String doHttpPostData(String url, TaskReleaseApprovalModel tram)
			throws Exception {
	StringBuffer sb = new StringBuffer();
	sb.append("doHttpPostData:url:" + url + ",tram:" + tram.toString() + ",contentType:" + contentType);	logger.info(sb.toString());
	String tmpString = "";
	HttpPost request = new HttpPost(url);
	request.setHeader("Accept", "application/json");
	request.setHeader("Content-type", "application/json");
	ObjectMapper mapper = new ObjectMapper();
	String jsonString;
	try {
	jsonString = mapper.writeValueAsString(tram);
	StringEntity entity = new StringEntity(jsonString, "UTF-8");
	request.setEntity(entity);
	CloseableHttpClient client = HttpClients.createDefault();
	HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
		tmpString = EntityUtils.toString(response.getEntity());
		logger.info("the post result:tmpString:{}", tmpString);
	} else {
		logger.info("the post failure:tmpString:", tmpString);
		throw new CommonBusinessException(CommonConstants.TASK_RELEASE_WCF,
				CommonConstants.TASK_RELEASE_WCF_DESC);
	}
} catch (Exception e) {
	logger.error(sb.toString() + ":" + e.getMessage(), e.getCause());
throw new CommonBusinessException(CommonConstants.TASK_RELEASE_POSTWCF,
			CommonConstants.TASK_RELEASE_POSTWCF_DESC);
}
	return tmpString;}

这个方法我想不用写测试类大家也会用,传过去对象和地址就可以了,很方便很简单。

本文分享自微信公众号 - 晏霖(yanlin199507),作者:晏霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java发送HTTPS请求

    上篇文章介绍了 java 发送 http 请求,大家都知道发送http是不安全的 。我也是由于对接了其他企业后总结了一套发送 https的工具。大家网上找方法很...

    胖虎
  • 策略模式

    策略设计模式难易程度应该是仅次于单例模式的,无论是实现起来还是从结构上看,都非常简单,他跟简单工厂都一部分思想类似,大家可以结合一下简单工厂来看策略模式,大家千...

    胖虎
  • SpringBoot配置文件敏感信息加密

    SpringBoot配置文件中的内容通常情况下是明文显示,安全性就比较低一些。在application.properties或application.yml,比...

    胖虎
  • 快速API自动化测试

    我们平时写API,时效性太慢了。而且花费的成本代价太高。特别是有严重的滞后性。当平台多,业务多,迭代多的时候,接口自动化实现出来的时候,黄花菜都凉了。

    赵云龙龙
  • 面试官让我用channel实现sync包里的同步锁,是不是故意为难我?

    今天,我将深入探讨Go语言channel和select语句的表达能力。为了演示只用这两个原语就可以实现多少功能,我将从头开始用它们重写sync包。

    KevinYan
  • 4500个热门景点数据,告诉你国庆长假的正确打开姿势

    国庆出游,确实是个让人头痛的问题。今天这位数据侠,不仅用数据告诉你国庆如何成功避开“people mountain people sea”,还手把手带你用Pyt...

    DT数据侠
  • 基于ELK的nginx-qps监控解决方案

    nginx-log中所有我们需要的信息,都是有的 。

    莫韵
  • 桥接模式1 定义2 结构3 分析4 优点5 缺点6 时机

    JavaEdge
  • React Native 小记 - TouchableOpacity 单次点击无效

    版权声明:本文为[他叫自己Mr.张]的原创文章,转载请注明出...

    他叫自己MR.张
  • Python爬取4500个景点:用echarts热力图分析国庆哪里最堵?

    于是我萌生了通过旅游网站的景点销量来判断近期各景点流量情况的想法(这个想法很危险啊)。

    机器学习AI算法工程

扫码关注云+社区

领取腾讯云代金券