`

http接口工具

 
阅读更多
package com.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.entity.ContentType;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

/*
 * Http接口 post
 * 接收下属客户端上传样本,保存样本文件
 * apache官网可以下载最新的jar包和demo
 * http://hc.apache.org/downloads.cgi
 */
public class TestSampleUpload4client {
	public static void main(String[] args) throws ClientProtocolException, IOException {
		String url = "http://192.168.1.6:8010/xxxxxxxxxxx/sample/fileUpload.action";
		// 配置要 POST 的数据
		MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
		// 设置为浏览器兼容模式
		multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
		// 设置请求的编码格式
		multipartEntityBuilder.setCharset(Charset.forName(HTTP.UTF_8));
		ContentType TEXT_PLAIN = ContentType.create("text/plain", Charset.forName(HTTP.UTF_8));

		// 设置一致的编码格式极其重要,否则容易出现乱码,不管客户端是以什么语言什么方式进行调用,必须让其编码格式与接收端一致;
		multipartEntityBuilder.addTextBody("userName", "admin", TEXT_PLAIN);
		multipartEntityBuilder.addTextBody("psd", "admin", TEXT_PLAIN);
		multipartEntityBuilder.addTextBody("mac", "ma2343344f1333", TEXT_PLAIN);
		multipartEntityBuilder.addTextBody("md5", "afy67juu8776a", TEXT_PLAIN);
		multipartEntityBuilder.addTextBody("type", "sample", TEXT_PLAIN);
		// 文件路径
		File file = new File("D:\\glpt\\abc.txt");
		multipartEntityBuilder.addBinaryBody("file", file);

		/*
		 * 以下的参数提交方式也行 StringBody userName = new StringBody("admin",
		 * ContentType.create( "text/plain", Consts.UTF_8)); StringBody password
		 * = new StringBody("admin", ContentType.create( "text/plain",
		 * Consts.UTF_8)); // 把文件转换成流对象FileBody FileBody bin = new
		 * FileBody(file); multipartEntityBuilder.addPart("username", userName);
		 * multipartEntityBuilder.addPart("password", password);
		 * multipartEntityBuilder.addPart("file", bin);
		 */
		post(url, multipartEntityBuilder);
	}

	public static void post(String url, MultipartEntityBuilder multipartEntityBuilder)
			throws ClientProtocolException, IOException {
		// 建立HttpPost对象
		HttpPost httppost = new HttpPost(url);
		HttpClient httpclient = HttpClientBuilder.create().build();
		// 生成 HTTP POST 实体
		HttpEntity httpEntity = multipartEntityBuilder.build();
		httppost.setEntity(httpEntity);
		// 发送Post,并返回一个HttpResponse对象
		HttpResponse httpResponse = httpclient.execute(httppost);
		// 以下两行可以得到指定的Header
		// Header header = httpResponse.getFirstHeader("Content-Length");
		// String headerVal = header.getValue();
		HttpEntity httpEntity2 = httpResponse.getEntity();
		System.out.println(
				"httpResponse.getStatusLine().getStatusCode():" + httpResponse.getStatusLine().getStatusCode());
		// 如果状态码为200,就是正常返回
		if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
			String result = EntityUtils.toString(httpEntity2);
			// 得到返回的字符串
			System.out.println(result);
			// 如果是下载文件,可以用response.getEntity().getContent()返回InputStream
		} else if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
			// 如果状态码为302
			String locationUrl = httpResponse.getLastHeader("location").getValue();
			post(locationUrl, multipartEntityBuilder);
		} else {
			String result = EntityUtils.toString(httpEntity2);
			// 得到返回的字符串
			System.out.println(result);
		}
	}

	/**
	 * 
	 * 另一种处理方式
	 * 
	 * @param args
	 * @throws UnsupportedEncodingException
	 * @throws IOException
	 * @throws ClientProtocolException
	 * 
	 *             public static void main(String[] args) throws
	 *             ClientProtocolException, IOException{ // TODO Auto-generated
	 *             method stub // POST的URL String url =
	 *             "http://192.168.10.203:8010/manageplatform/sample/sampleUpload.action";
	 *             // 建立HttpPost对象 HttpPost httppost = new HttpPost(url); //
	 *             建立一个NameValuePair数组,用于存储欲传送的参数 List<NameValuePair> params =
	 *             new ArrayList<NameValuePair>();
	 * 
	 *             // 添加参数 params.add(new BasicNameValuePair("userName",
	 *             "admin")); params.add(new BasicNameValuePair("psd",
	 *             "admin")); params.add(new BasicNameValuePair("mac",
	 *             "mac3333333333")); params.add(new BasicNameValuePair("md5",
	 *             "md5555555555")); params.add(new BasicNameValuePair("type",
	 *             "sample"));
	 * 
	 * 
	 * 
	 *             HttpClient httpclient = new DefaultHttpClient(); // 设置编码
	 *             httppost.setEntity(new UrlEncodedFormEntity(params,
	 *             HTTP.UTF_8));
	 * 
	 *             // 发送Post,并返回一个HttpResponse对象 HttpResponse httpResponse =
	 *             httpclient.execute(httppost); // 以下两行可以得到指定的Header Header
	 *             header = httpResponse.getFirstHeader("Content-Length");
	 *             String headerVal = header.getValue();
	 * 
	 * 
	 *             HttpEntity httpEntity = httpResponse.getEntity();
	 * 
	 * 
	 *             if (httpResponse.getStatusLine().getStatusCode() ==
	 *             HttpStatus.SC_OK) {// 如果状态码为200,就是正常返回 String result =
	 *             EntityUtils.toString(httpEntity); // 得到返回的字符串
	 *             System.out.println(result); // 打印输出 //
	 *             如果是下载文件,可以用response.getEntity().getContent()返回InputStream
	 *             }else { String result = EntityUtils.toString(httpEntity); //
	 *             得到返回的字符串 System.out.println(result); } }
	 */

	/*
	 * 以上例子中http请求了一个url:http://
	 * 192.168.10.xxx:8010/xxxxxxxx/sample/sampleUpload.action;
	 * 其中sampleUpload.action是用struts配置的;sampleUpload.action对应的action方法如下:
	 */

	/**
	 * HTTP接口, 接收下属客户端及子管理中心上传样本,保存样本文件
	 * 
	 * @return
	 */
	public void sampleUpload() {
		OutputStream out = null;
		try {
			out = sResponse.getOutputStream();
			String result = "Response=101;";
			String path = sRequest.getSession().getServletContext().getRealPath("/");
			System.out.println(path);
			// 用户认证
			String userName = sRequest.getParameter("userName");
			String psd = sRequest.getParameter("psd");
			// 此处省略了用户权限认证的操作;
			String md5 = sRequest.getParameter("md5");
			String mac = sRequest.getParameter("mac");
			String type = sRequest.getParameter("type");
			String ip = sRequest.getRemoteAddr();

			if (StringUtils.isEmpty(md5) || StringUtils.isEmpty(mac) || StringUtils.isEmpty(type)) {
				result = "Response=011;";
			} else {
				for (int i = 0; i < fileFileName.size(); i++) {
					try {
						String filename = fileFileName.get(i);
						String savePath = StringUtils.isEmpty(UrlAddress.getUrl(type))
								? path + "WEB-INF/uploadPath/" + type : UrlAddress.getUrl(type);
						if (!new File(savePath).exists()) {
							new File(savePath).mkdirs();
						}

						filename = savePath + "/" + filename;
						// sampleName = fileFileName.get(i);
						FileOutputStream fos = new FileOutputStream(filename);
						InputStream is = new FileInputStream(file.get(i));
						byte[] buffer = new byte[BUFFER_SIZE];
						int count = 0;
						while ((count = is.read(buffer)) > 0) {
							fos.write(buffer, 0, count);
						}
						fos.close();
						is.close();
						filename = filename.replace('\\', '/');
						result = "Response=000;";

						//result = sampleService.sampleUpload(type, md5, mac, filename, ip);
					} catch (Exception e) {
						result = "Response=101;";
						e.printStackTrace();
					}
				}
			}
			// 记录接口日志
			//sampleService.interfaceLogSave("1", mac, md5, ip, result);
			// 返回操作结果
			out.write(result.getBytes());
			out.flush();
		} catch (IOException e1) {
			e1.printStackTrace();
		} finally {
			try {
				if (out != null)
					out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

分享到:
评论

相关推荐

    基于JavaScript的APIAuto敏捷开发一站式HTTP接口工具设计源码

    该项目是一款基于JavaScript开发的敏捷开发一站式HTTP接口工具源码,包含401个文件,涵盖201个JavaScript文件、100个HTML文件、63个CSS文件以及各类辅助文件,如map、png、psd、svg、md、json、gitignore等。...

    APIAuto::umbrella_with_rain_drops: 敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释。:umbrella_with_rain_drops: The most advanced tool for HTTP API. Testing with machine learning, generating codes, static analysising, generating documents, generating a

    敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释。 在常用功能上远超 Postman, Swagger, YApi, Rap 等其它各种 开源、商业 的 API 文档/测试 工具。 支持 ...

    http 接口测试工具离线包 非浏览器插件

    本资源提供的是一款非浏览器插件的HTTP接口测试工具离线包,适用于那些希望在不依赖浏览器的情况下进行接口测试的用户。 标题中提到的"HTTP接口测试工具离线包"意味着这是一个可以独立于浏览器运行的应用程序,它不...

    HTTP接口测试工具

    HTTP接口测试工具是一种用于验证和调试HTTP协议服务端接口的应用程序。它允许开发者发送GET、POST以及其他HTTP请求方法,以检查服务器的响应、状态码、头部信息以及返回的数据。这样的工具在软件开发过程中至关重要...

    http接口测试工具

    本文将详细介绍HTTP接口测试工具及其在实际工作中的应用。 HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。而HTTP接口测试工具则是针对这些...

    android HTTP接口测试软件

    总的来说,这个工具为Android开发者提供了一个便携式的HTTP接口测试环境,无论是在开发阶段还是在维护阶段,都能帮助开发者更高效地测试和调试HTTP接口。它简化了测试流程,提高了开发效率,是Android开发者必备的...

    Http帮助工具、接口测试

    这个工具由用户自己开发,旨在提供一个便捷的环境,让开发者能够快速、有效地测试HTTP接口的功能和性能。 在HTTP协议中,接口通常指的是Web服务,通过发送HTTP请求(如GET、POST、PUT、DELETE等)到特定的URL,获取...

    http接口测试工具-可发xml json格式报文

    http接口测试工具-可发xml json格式报文

    webservice接口调试工具

    2. **Storm.exe工具介绍**:Storm.exe是一个简洁易用的Web服务接口调试工具,其主要功能包括发送HTTP请求、查看响应数据、分析请求头和响应头,以及测试各种HTTP方法(如GET、POST、PUT、DELETE等)。通过直观的界面...

    http接口请求工具类

    这是一个http请求工具类,里面有get接口请求和post接口请求传递map或json类型的参数的方法,里面还有put和delete的请求方法,此工具类可以在项目中直接使用

    HTTP 接口 机器学习零代码测试 和 一站式智能开发管理 工具

    敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释。集文档、测试、Mock、调试、管理 于一体的一站式体验,还有一键 格式化、注释/取消注释 等高效易用的快捷键...

    WebService接口测试工具

    【WebService接口测试工具】是一种轻量级但功能强大的软件,主要针对开发人员和测试人员,用于测试和调试基于Web Service的接口。Web Service是互联网上应用程序之间交互的一种标准技术,通常基于SOAP(Simple ...

    Http接口测试工具HttpTestTool

    项目需要测试http接口,网络上已有的工具,像fiddle、开源小工具这些,都不符合我快速测试要求,于是仿照当时在华为做外包时的一个工具,写了一个简洁版的。 工具支持测试get、post消息,自定义http header,没有...

    HTTP服务端接口模拟工具-HttpServerMockTool

    这个工具可以通过简单的配置达到快速模拟第三方HTTP服务端接口的作用,替代以前要手写servlet代码再放到tomcat下的过程。使用指南可以参照工具中的帮助标签,或者我的博客...

    海康OpenAPI接口测试工具

    海康OpenAPI接口测试工具是一款专门针对海康威视设备和服务进行接口测试的应用程序,它旨在帮助开发者和系统管理员高效地验证和调试海康威视的API接口功能。这款工具对于确保海康威视产品的稳定性和正确性至关重要,...

    c#写的接口测试工具,支持post get put del请求

    【标题】中的“c#写的接口测试工具,支持post get put del请求”表明这是一个使用C#编程语言开发的软件工具,其主要功能是进行HTTP接口的测试。它涵盖了HTTP协议中常见的四种请求方法:POST(用于提交数据)、GET...

    Storm-webservice接口调试工具

    Storm Webservice接口调试工具则提供了更简洁的操作流程,它允许用户直接输入或导入接口调用所需的参数,实时查看响应结果,同时支持多种HTTP请求方法(GET、POST、PUT、DELETE等)。这样的设计使得开发者可以快速...

    PHP API接口测试小工具

    在文章《http://www.cnblogs.com/strick/p/3986358.html》中,作者详细介绍了这个PHP API接口测试工具的使用方法。该工具可能包含以下核心功能: 1. **请求构造**:允许用户自定义HTTP请求的方法(如GET、POST、PUT...

Global site tag (gtag.js) - Google Analytics