package vqmp.data.pull.vqmpull.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import vqmp.data.pull.vqmpull.common.enums.ResultEnum;
import vqmp.data.pull.vqmpull.common.exception.VQMPException; import java.util.List; /**
* @author 01372231
* @
* @date 2019/3/4 15:14
*/
public class RequestUtil {
private static final Logger logger = LoggerFactory.getLogger(RequestUtil.class); private RequestUtil() {
throw new IllegalAccessError("Instantiate me is forbid");
} /**
*
*
* @return 返回cookie值
* @throws Exception 获取token失败
*/
public static List<String> getItobToken(String itobTokenUrl) { LinkedMultiValueMap<String, String> body = new LinkedMultiValueMap();
body.add("userRole", "VIP");
body.add("centerName", "SF"); ResponseEntity request = requestEntity(itobTokenUrl, HttpMethod.POST, body, new HttpHeaders());
HttpHeaders headers = request.getHeaders();
List<String> strings = headers.get("Set-Cookie");
if (null == strings) {
logger.error("url{}-获取token失败", itobTokenUrl);
throw new VQMPException(ResultEnum.FAIL.getCode(), "获取token失败");
} //获取jira数据
return strings;
} public static ResponseEntity requestEntity(String url, HttpMethod method, MultiValueMap<String, String> body, HttpHeaders headers) {
logger.info("发送请求地址url:{}", url);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
if (method.equals(HttpMethod.POST)) {
headers.set("Content-Type", "application/x-www-form-urlencoded");
}
HttpEntity entity = null;
if (null != body) {
entity = new HttpEntity(body, headers);
} else {
entity = new HttpEntity(headers); }
ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, entity, String.class);
if (responseEntity.getStatusCode() == HttpStatus.REQUEST_TIMEOUT) {
logger.error("接口请求超时,接口地址: {}", url);
throw new VQMPException("接口" + url + "请求超时");
} return responseEntity; } /**
* get response body
*
* @param url request url
* @param method reuqest method
* @param body request params
* @param headers request headers
* @return
* @throws Exception
*/
public static String request(String url, HttpMethod method, MultiValueMap<String, Object> body, HttpHeaders headers) {
logger.info("发送请求地址url:{}", url);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
headers.set("Content-Type", "application/x-www-form-urlencoded");
HttpEntity entity = new HttpEntity(body, headers); ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, entity, String.class);
if (responseEntity.getStatusCode() == HttpStatus.REQUEST_TIMEOUT) {
logger.error("接口请求超时,接口地址: {}", url);
throw new VQMPException("接口" + url + "请求超时");
}
if (responseEntity.getStatusCode().value() != 200) {
throw new VQMPException(String.format("tcmp响应报错 : {} ", responseEntity.toString()));
} return responseEntity.getBody(); } }
package com.sf.tcmp.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL; /**
*
* @author 01368324
*
*/
public final class RequestAPIUtil { private static final Logger logger = LoggerFactory.getLogger(RequestAPIUtil.class); private static final String LOGSTRING = "接口地址:{},接口名:{}"; private RequestAPIUtil(){
throw new IllegalAccessError("Instantiate me is forbid");
} /**
* Jira 的webService接口请求
* @param urlStr 请求url
* @param apiName 接口名
* @param arg 参数
* @return
*/
public static String postRequest(String urlStr,String apiName,String arg){
String result = "";
try {
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setConnectTimeout(10000);
con.setRequestProperty("Content-Type", "application/xml;");
OutputStream oStream = con.getOutputStream();
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<soapenv:Envelope "+
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
"xmlns:gs=\"http://server.itms.inf.itdd.sf.com/\">"+
" <soapenv:Header/>"+
" <soapenv:Body>"; soap = soap+" <gs:"+apiName+">";
soap=soap+" <arg0>" + arg + "</arg0>"; soap = soap+" </gs:"+apiName+">";
soap = soap+" </soap:Body>"+
"</soapenv:Envelope>";
oStream.write(soap.getBytes());
oStream.close();
InputStream iStream = con.getInputStream();
Reader reader = new InputStreamReader(iStream,"utf-8"); int tempChar;
String str = new String("");
while((tempChar = reader.read()) != -1){
str += Character.toString ((char)tempChar);
}
//下面这行输出返回的xml到控制台,相关的解析操作大家自己动手喽。
//如果想要简单的话,也可以用正则表达式取结果出来。
result = str.substring(str.indexOf("<return>")+8, str.indexOf("</return>"));
iStream.close();
oStream.close();
con.disconnect();
} catch (ConnectException e){
logger.error(LOGSTRING,urlStr,apiName,e);
}catch (IOException e) {
logger.error(LOGSTRING,urlStr,apiName,e);
} catch (Exception e){
logger.error(LOGSTRING,urlStr,apiName,e);
}
return result;
}
/**
* webservice接口请求demo
* @return
*/
public static String requestDemo(){
String result = "";
try {
//http://10.202.6.70:6060/itdd-app/inf-ws/SyncITMSData
String urlStr = "";
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
OutputStream oStream = con.getOutputStream();
//下面这行代码是用字符串拼出要发送的xml,xml的内容是从测试软件里拷贝出来的
//需要注意的是,有些空格不要弄丢哦,要不然会报500错误的。
//参数什么的,你可以封装一下方法,自动生成对应的xml脚本
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<soapenv:Envelope "+
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
"xmlns:gs=\"http://server.itms.inf.itdd.sf.com/\">"+
" <soapenv:Header/>"+
" <soapenv:Body>"+
" <gs:getVersionBySysCode>"+
" <arg0>" + "ESG-SDEIS-CORE" + "</arg0>"+
" </gs:getVersionBySysCode>"+
" </soap:Body>"+
"</soapenv:Envelope>";
oStream.write(soap.getBytes());
oStream.close();
InputStream iStream = con.getInputStream();
Reader reader = new InputStreamReader(iStream); int tempChar;
StringBuilder str = new StringBuilder();
while((tempChar = reader.read()) != -1){
str.append(Character.toString((char) tempChar));
}
//下面这行输出返回的xml到控制台,相关的解析操作大家自己动手喽。
//如果想要简单的话,也可以用正则表达式取结果出来。
result = str.substring(str.indexOf("<return>")+8, str.indexOf("</return>"));
iStream.close();
oStream.close();
con.disconnect();
} catch (Exception e) {
logger.error("content:",e);
}
return result;
}
}

java的http请求实例的更多相关文章

  1. Flex通信-与Java实现Socket通信实例

    Flex通信-与Java实现Socket通信实例  转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...

  2. java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  3. java HttpClient POST请求

    一个简单的HttpClient POST 请求实例 package com.httpclientget; import java.awt.List; import java.util.ArrayLis ...

  4. 【转载】java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  5. java实现HTTP请求 HttpUtil

    示例: package com.sensor.utils; import java.net.HttpURLConnection; import java.net.URL; public class H ...

  6. HTTP:Java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种: 一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,H ...

  7. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

  8. java 实现https请求

    java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从 ...

  9. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

随机推荐

  1. Vue学习(一)Vue目录结构

    安装教程网上一大把,可以自己搜索.记录下学习过程. 认识下Vue的目录结构,取自:https://www.cnblogs.com/dragonir/p/8711761.html vue 文件目录结构详 ...

  2. ajax的一些相关

    1.AJAX = Asynchronous(异步的) JavaScript and XML AJAX是能不刷新整个网页的前提下,更新内容.通过少量的数据交换,达成局部页面刷新的效果. 而form表单提 ...

  3. POJ1848--Tree ——树形dp

    题意:给你一个树,问你最少连几条边可以让树中的每一个节点在且只在一个环内.如果无法完成就输出-1. 我们设dp[i][0]为根节点为i的树变成每一个节点都在且只在一个环里所需要的最小边数.dp[i][ ...

  4. bug日记之-------java.io.IOException: Server returned HTTP response code: 400 for URL

    报的错误 出事代码 出事原因 解决方案 总结 多看源码, 我上面的实现方式并不好, 如果返回的响应编码为400以下却又不是200的情况下getErrorStream会返回null, 所以具体完美的解决 ...

  5. VS 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案

    在VS中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may be uns ...

  6. Vue-admin工作整理(十三):Vuex-严格模式

    严格模式:开发过程中对规范的要求,定义方式为在store实例初始化的时候将strict设置为true,这样的话就是开启了严格模式.在这种情况下,如果要直接修改state里面的值,那就会报问题.那么也可 ...

  7. three.js初探,立体几何入手(一)

    前言:首先先推荐一篇博客,关于webgl原理,讲的非常之通俗易懂了 图解WebGL&Three.js工作原理  webGL可以理解为openGL ES2.0 (webGL2.0 - openG ...

  8. 也谈开源GIS架构实现思想

    针对业务发展需要,需要开发设计一套具备自己独立GIS平台.然而以ArcGIS为主的GIS软件价格昂贵,在经过仔细技术与市场动向调研后,确立一套以Java语言的开源GIS软件平台.桌面CS端Udig+G ...

  9. 业务限流场景简单实现方案:RateLimiter

    前因:因为本系统中,有大数据高并发的场景.在向下游系统发送请求的时候,需要限流.否则会造成下游系统的堵塞. 实现方案1: Thread.sleep(ms). 优点:简单粗暴,一行代码搞定 缺点:有点l ...

  10. JavaScript如何生成思维导图(mindmap)

    JavaScript如何生成思维导图(mindmap) 一.总结 一句话总结:可以直接用gojs gojs 二.一个用JavaScript生成思维导图(mindmap)的github repo(转) ...