博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件
阅读量:4352 次
发布时间:2019-06-07

本文共 9734 字,大约阅读时间需要 32 分钟。

 

 

 

1.发送get、post携带参数以及post请求接受JSON数据:

package cn.qlq.utils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URI;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.StatusLine;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;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.DefaultHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.params.HttpParams;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * http工具类的使用 *  * @author Administrator * */public class HttpUtils {    private static Logger logger = LoggerFactory.getLogger(HttpUtils.class);        /**     * 测试代码     * @param args     */    public static void main(String[] args) {        Map
params = new HashMap
(); params.put("entityClazz", "com.ebuytech.business.model.dto.v2.pms.PmsCampaign"); params.put("idField", "campaignId"); params.put("textField", "campaignName"); System.out.println(HttpUtils.doGetWithParams("http://xiaoe.e-buychina.com/common/widgetdata", params )); } /** * get请求 * * @return */ public static String doGet(String url, Map params) { try { HttpClient client = new DefaultHttpClient(); // 发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /** 请求发送成功,并得到响应 **/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /** 读取服务器返回过来的json字符串数据 **/ String strResult = EntityUtils.toString(response.getEntity(),"utf-8"); return strResult; } } catch (IOException e) { logger.debug("get data error"); } return null; } /** * get请求携带参数(注意只能是英文参数) * * @return */ public static String doGetWithParams(String url, Map params) { try { HttpClient client = new DefaultHttpClient(); //如果携带参数,重新拼接get参数 if(params !=null && params.size()>0){ StringBuffer sb = new StringBuffer(url); sb.append("?"); for(Object key : params.keySet() ){ sb.append(key+"="+params.get(key)+"&"); } url = sb.toString().substring(0, sb.length()-1); } // 发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /** 请求发送成功,并得到响应 **/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /** 读取服务器返回过来的json字符串数据 **/ String strResult = EntityUtils.toString(response.getEntity(),"utf-8"); return strResult; } } catch (IOException e) { logger.debug("get data error"); } return null; } /** * post请求(用于key-value格式的参数) * * @param url * @param params * @return */ public static String doPost(String url, Map params) { BufferedReader in = null; try { // 定义HttpClient HttpClient client = new DefaultHttpClient(); // 实例化HTTP方法 HttpPost request = new HttpPost(); request.setURI(new URI(url)); // 设置参数 List
nvps = new ArrayList
(); for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String value = String.valueOf(params.get(name)); nvps.add(new BasicNameValuePair(name, value)); } request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = client.execute(request); int code = response.getStatusLine().getStatusCode(); if (code == 200) { // 请求成功 in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8")); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); return sb.toString(); } else { // System.out.println("状态码:" + code); return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * post请求(用于请求json格式的参数) * * @param url * @param params * @return */ public static String doPost(String url, String params) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url);// 创建httpPost httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-Type", "application/json"); String charSet = "UTF-8"; StringEntity entity = new StringEntity(params, charSet); httpPost.setEntity(entity); CloseableHttpResponse response = null; try { response = httpclient.execute(httpPost); StatusLine status = response.getStatusLine(); int state = status.getStatusCode(); if (state == HttpStatus.SC_OK) { HttpEntity responseEntity = response.getEntity(); String jsonString = EntityUtils.toString(responseEntity); return jsonString; } else { logger.error("请求返回:" + state + "(" + url + ")"); } } finally { if (response != null) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }}

 

补充:get请求可以指定对返回数据的编码格式防止中文乱码:

String strResult = EntityUtils.toString(response.getEntity(),"utf-8");

 

 

2.上传文件,可以携带参数

import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java.nio.charset.Charset;import org.apache.http.HttpEntity;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.ContentType;import org.apache.http.entity.mime.HttpMultipartMode;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;/** * httpclient上传文件(测试没问题) *  * @author Administrator * */public class HttpClientUploadFile {    public static void main(String[] args) throws ClassNotFoundException, ClientProtocolException, IOException {        CloseableHttpClient httpclient = HttpClientBuilder.create().build();        CloseableHttpResponse response = null;        try {            HttpPost httppost = new HttpPost("http://localhost/document/doUpload.html;jsessionid=512F7F701BD1DF6F2D73010094A42EC8");            //可以选择文件,也可以选择附加的参数            HttpEntity req = MultipartEntityBuilder.create()                    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)                    .addPart("docUpload", new FileBody(new File("C:\\Users\\Administrator\\Desktop\\changelog-20180626(4).txt")))//上传文件,如果不需要上传文件注掉此行                    .addTextBody("folderId", "5")                    .addTextBody("trainPlanFormUpload", "false",ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8))//最后的ContentType是防止中文参数乱码                    .build();            httppost.setEntity(req);            System.out.println("executing request: "                    + httppost.getRequestLine());            response = httpclient.execute(httppost);            HttpEntity re = response.getEntity();            System.out.println(response.getStatusLine());            if (re != null) {                System.out.println("Response content: "                        + new BufferedReader(new InputStreamReader(re                                .getContent())).readLine());            }            EntityUtils.consume(re);        } finally {            try {                response.close();            } catch (Exception e) {                e.printStackTrace();            }        }    }}

 

补充:HttpClient包中还有一个类使用方法类似于Map,存放键值对信息,如下:

NameValuePair name = new NameValuePair("xxx", "value");        System.out.println(name.getName());        System.out.println(name.getValue());

结果:

xxx

value

查看源码发现内部维护一个name和value属性,如下:

public NameValuePair(String name, String value) {        this.name = name;        this.value = value;    }

 

转载于:https://www.cnblogs.com/qlqwjy/p/9306541.html

你可能感兴趣的文章
Consistent Hashing算法
查看>>
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
查看>>
lvs,nginx反向代理,虚拟主机
查看>>
jquip,更简洁的代码
查看>>
【OJ】PAT-A解题报告
查看>>
文档语法
查看>>
利用套接字实现进程通信一例
查看>>
linux中shell变量$#,$@,$0,$1,$2的含义解释
查看>>
常用的shell命令整理
查看>>
A Brief Introduction to the Design of UBIFS
查看>>
了解你的Linux系统:必须掌握的20个命令
查看>>
js setInterval 启用&停止
查看>>
knockoutJS学习笔记04:监控属性
查看>>
Linux下启动/关闭Oracle
查看>>
session和cookie的区别
查看>>
oracle 数据库、实例、服务名、SID
查看>>
web.xml文件的作用
查看>>
linux下oracle调试小知识
查看>>
alert弹出窗口,点击确认后关闭页面
查看>>
oracle问题之数据库恢复(三)
查看>>