参考:https://blog.csdn.net/yubin1285570923/article/details/126225347
文章目录
可以直接使用HttpRequest调用(httputil底层封装的方法)
put请求
public Boolean saveResult(SaveResultDto saveResultDto) {
String url = forecastUrl + "/yb/fldplan/" + saveResultDto.getResultCode()+"?stcd="+saveResultDto.getStcd()+
"&st="+saveResultDto.getSt() +"&et="+saveResultDto.getEt() +"&areap="+saveResultDto.getAreap() + "&q="+saveResultDto.getQ();
String body = HttpRequest.put(url).execute().body();
return "ok".equals(body.toLowerCase());
}
post带请求头
String value = MySM4Utils.encryptEcb(login.getDataKey(), json, MySM4Utils.ENCODING);
JSONObject jsonObject = new JSONObject();
jsonObject.putOnce("data", value);
String post = HttpRequest.post(login.getDataUrl()).header("Authorization", "Bearer "+ login.getAccessToken()).body(jsonObject.toString()).execute().body();
get、delete类似…
java原生HttpURLConnection
使用JDK原生提供的net,无需其他jar包,代码如下:
import com.alibaba.fastjson.JSON;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class HttpTest1 {
public static void main(String[] args) {
HttpURLConnection con = null;
BufferedReader buffer = null;
StringBuffer resultBuffer = null;
try {
URL url = new URL("http://10.30.10.151:8012/gateway.do");
//得到连接对象
con = (HttpURLConnection) url.openConnection();
//设置请求类型
con.setRequestMethod("POST");
//设置Content-Type,此处根据实际情况确定
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//允许写出
con.setDoOutput(true);
//允许读入
con.setDoInput(true);
//不使用缓存
con.setUseCaches(false);
OutputStream os = con.getOutputStream();
Map paraMap = new HashMap();
paraMap.put("type", "wx");
paraMap.put("mchid", "10101");
//组装入参
os.write(("consumerAppId=test&serviceName=queryMerchantService¶ms=" + JSON.toJSONString(paraMap)).getBytes());
//得到响应码
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//得到响应流
InputStream inputStream = con.getInputStream();
//将响应流转换成字符串
resultBuffer = new StringBuffer();
String line;
buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
while ((line = buffer.readLine()) != null) {
resultBuffer.append(line);
}
System.out.println("result:" + resultBuffer.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
独立jar包半原生HttpClient
需要用到commons-httpclient-3.1.jar,maven依赖如下:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
import com.alibaba.fastjson.JSON;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class HttpTest2 {
public static void main(String[] args) {
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod("http://10.30.10.151:8012/gateway.do");
postMethod.addRequestHeader("accept", "*/*");
//设置Content-Type,此处根据实际情况确定
postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//必须设置下面这个Header
//添加请求参数
Map paraMap = new HashMap();
paraMap.put("type", "wx");
paraMap.put("mchid", "10101");
postMethod.addParameter("consumerAppId", "test");
postMethod.addParameter("serviceName", "queryMerchantService");
postMethod.addParameter("params", JSON.toJSONString(paraMap));
String result = "";
try {
int code = httpClient.executeMethod(postMethod);
if (code == 200){
result = postMethod.getResponseBodyAsString();
System.out.println("result:" + result);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
看一下我实际应用的例子
public String getOsmoticPressureToken() {
try {
String newUrl = tokenUrlPath + "?tenantId=000000&username=lgm&password=e10adc3949ba59abbe56e057f20f883e&grant_type=password&scope=all&type=account";
URL url = new URL(newUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//请求方式是POST
urlConnection.setRequestMethod("POST");
// Post 请求不能使用缓存
urlConnection.setUseCaches(false);
// http正文内,因此需要设为true
urlConnection.setDoOutput(Boolean.TRUE);
urlConnection.setDoInput(Boolean.TRUE);
//设置请求头
urlConnection.setRequestProperty("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0");
urlConnection.setRequestProperty("Tenant-Id", "000000");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setInstanceFollowRedirects(false);
//建立连接
urlConnection.connect();
String line = null;
StringBuilder result = new StringBuilder();
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));// 发送http请求
// 循环读取流
while ((line = reader.readLine()) != null) {
result.append(line).append(System.getProperty("line.separator"));
}
// System.out.println(result.toString());
//如果返回值是标准的JSON字符串可以像我这样给他进行转换
HashMap<String, Object> parseObject = JSONObject.parseObject(String.valueOf(result), HashMap.class);
redisTemplate.opsForValue().set("OsmoticToken",parseObject.get("access_token"));
}else{
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream(), "UTF-8"));// 发送http请求
// 循环读取流
while ((line = reader.readLine()) != null) {
result.append(line).append(System.getProperty("line.separator"));
}
System.out.println(result.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
CloseableHttpClient
需要用到httpclient-4.5.6.jar,maven依赖如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
import com.alibaba.fastjson.JSON;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
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;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HttpTest3 {
public static void main(String[] args) {
int timeout = 120000;
CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
HttpPost httpPost = null;
List<NameValuePair> nvps = null;
CloseableHttpResponse responses = null;// 命名冲突,换一个名字,response
HttpEntity resEntity = null;
String result;
try {
httpPost = new HttpPost("http://10.30.10.151:8012/gateway.do");
httpPost.setConfig(defaultRequestConfig);
Map paraMap = new HashMap();
paraMap.put("type", "wx");
paraMap.put("mchid", "10101");
nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("consumerAppId", "test"));
nvps.add(new BasicNameValuePair("serviceName", "queryMerchantService"));
nvps.add(new BasicNameValuePair("params", JSON.toJSONString(paraMap)));
httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
responses = httpClient.execute(httpPost);
resEntity = responses.getEntity();
result = EntityUtils.toString(resEntity, Consts.UTF_8);
EntityUtils.consume(resEntity);
System.out.println("result:" + result);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
responses.close();
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
spring体系自带RestTemplate
RestTemplate 是由Spring提供的一个HTTP请求工具。比传统的Apache和HttpCLient便捷许多,能够大大提高客户端的编写效率。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(15000);
factory.setReadTimeout(5000);
return factory;
}
}
@Autowired
RestTemplate restTemplate;
@Test
public void postTest() throws Exception {
MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();
Map paraMap = new HashMap();
paraMap.put("type", "wx");
paraMap.put("mchid", "10101");
requestEntity.add("consumerAppId", "test");
requestEntity.add("serviceName", "queryMerchant");
requestEntity.add("params", JSON.toJSONString(paraMap));
RestTemplate restTemplate = new RestTemplate();
System.out.println(restTemplate.postForObject("http://10.30.10.151:8012/gateway.do", requestEntity, String.class));
}
HttpUtil hutu工具包封装的此模块基于JDK的HttpUrlConnection封装完成
get请求
// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");
// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);
//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3= HttpUtil.get("https://www.baidu.com", paramMap);
post请求
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75420.html