1.前言.
如题.
2.代码.
/*
* Copyright (c) 2015, S.F. Express Inc. All rights reserved.
*/
package com.test.test.test.send;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.test.test.test.util.SendConstants;
/**
*
* 描述:httpurl的http发送
* 作者:李俊南
*/
public class TestHttpMultiSendManagerTest implements TestSendManager {
private Logger logger = LoggerFactory
.getLogger(DrpHttpMultiSendManagerTest.class);
@Override
public String send(String url, String port, String content, String type) {
switch (type) {
case SendConstants.SEND_RES:
return sendRes(url, content);
case SendConstants.SEND_NO_RES:
return sendNoRes(url, content);
case SendConstants.SEND_ASY_RES:
return sendAsyRes(url, content);
case SendConstants.SEND_ASY_NO_RES:
return sendAsyNoRes(url, content);
default:
}
return null;
}
public String Object(String url, String content, String type) {
return send(url, "", content, type);
}
/**
* ͬ�发送
*
* @param url
* @param content
* @return String
* @throws ProtocolException
* @throws MalformedURLException
*/
public String sendRes(String sendUrl, String content) {
// URL url = new URL("http://localhost:8083/test");
URL url = null;
URLConnection rulConnection = null;
HttpURLConnection httpUrlConnection = null;
try {
url = new URL(sendUrl + SendConstants.SEND_PARAM_NAME
+ URLEncoder.encode(content, "utf8"));
rulConnection = url.openConnection();
httpUrlConnection = (HttpURLConnection) rulConnection;
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setConnectTimeout(5000);
httpUrlConnection.setReadTimeout(5000);
httpUrlConnection.setRequestProperty("Content-type", "text/html");
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.connect();
try (InputStream inStrm = httpUrlConnection.getInputStream();) {
// byte[] b = new byte[inStrm.available()];
// int len = 0;
// StringBuilder resultContent = new StringBuilder();
// while (len < inStrm.available()) {
// len += inStrm.read(b, len, inStrm.available() - len);
// resultContent.append(new String(b));
// }
// String result = resultContent.toString();
String result=getEncodedData(inStrm);
inStrm.close();
logger.info("返回:" + result);
return result;
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (null != httpUrlConnection) {
httpUrlConnection.disconnect();
}
}
}
/**
* 此方法用于从输入流中获取数据
*
* @param is 接收来自客户端socket对应的输入流
* @return 返回endodedData
* @throws IOException 抛出的异常,统一在run函数处理
*/
private String getEncodedData(InputStream is) throws IOException {
byte[] maxBuffer = new byte[1024 * 64];
int length = 0;
int lengthTemp = 0;
while (-1 != (lengthTemp = is.read(maxBuffer))) { // read方法并不保证一次能读取1024*64个字节
length += lengthTemp;
if (length >= 1024 * 64) {
logger.debug("读入的数据超过1024 * 64");
break;
}
}
byte[] endodedData = new byte[length];
System.arraycopy(maxBuffer, 0, endodedData, 0, length);
//logger.info("receiveData:" + bytesToHexString(endodedData) + '\n');
return new String(endodedData);
}
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv+" ");
}
return stringBuilder.toString();
}
public String sendNoRes(String url, String content) {
return null;
}
public String sendAsyRes(String url, String content) {
return null;
}
public String sendAsyNoRes(String url, String content) {
return null;
}
}
3.注意事项.
(1)available读法有点不可靠,可能造成数据丢失,所以应该用字节读取办法来,代码中注释的available可对比一下替换的内容.
(2)字节转字符直接用new String()就可以了.
分享到:
相关推荐
在`HttpURLConnection-Vegetables`项目中,可能涉及的是利用`HttpURLConnection`向蔬菜相关的API发送请求,获取或发送蔬菜的数据。你可以从文件列表中找到具体的代码示例,了解如何组织请求和解析响应。这样的实践有...
### 使用HttpURLConnection发送短信 在Java开发中,通过网络接口实现短信发送是一种常见的应用场景,例如在用户注册、找回密码等场景下验证用户身份时。本文将详细介绍如何利用`HttpURLConnection`来实现短信发送...
本话题主要关注如何使用`HttpURLConnection`来实现从本地目录读取资源并上传到远程服务器的功能。 首先,`HttpURLConnection`是`java.net.URL`类的子类,它可以建立与指定URL所代表的服务器的连接,并执行HTTP协议...
- 连接管理和超时:设置适当的连接超时和读取超时,防止程序挂起。 - 使用HTTPS:如果涉及到敏感信息传输,应使用HTTPS保证通信安全。 5. 性能优化: - 使用连接池:复用HttpURLConnection实例,减少TCP三次握手...
它在URL中携带参数,通过这种方式向服务器发送请求。GET请求的安全性和幂等性相对较弱,即同一个请求可能会产生不同的结果,或者对服务器有副作用。 HttpURLConnection是Java SDK内置的一个类,可以用来建立HTTP...
HttpURLConnection是一个Java类,用于从网络中读取数据或向网络中写入数据。下面将详细介绍JAVA通过HttpURLConnection上传和下载文件的方法。 一、HttpURLConnection的概述 HttpURLConnection是Java中的一个类,...
通过循环读取输入流并写入输出流,直到所有数据都被读取和写入。 当下载完成后,关闭输入流和输出流以释放资源。整个过程遵循了Java的"流式编程"模型,即通过流对象将数据从源头(网络)传输到目的地(本地文件)。...
本文将深入探讨"小码农的代码(五)----------web交互之HTTP传输HttpURLConnection"这一主题,结合提供的标签"源码"和"工具",我们将讨论如何使用Java中的HttpURLConnection类来实现HTTP请求,以及它在实际开发中的...
标题中的“即时访问网络图片文件展示---HttpURLConnection”是指通过Java的HttpURLConnection类来实现从网络上获取并显示图片的功能。HttpURLConnection是Java标准库提供的一种HTTP协议的网络连接工具,它允许应用...
- `getInputStream()`和`getErrorStream()`:分别用于读取正常响应和错误响应的数据流。 ### 5. 示例代码 ```java // GET请求示例 URL url = new URL("http://example.com"); HttpURLConnection conn = ...
调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 设置HTTP请求使用的方法:conn.setRequestMethod("GET"); 设置连接超时,...
**步骤5:异常处理和关闭流** 在下载过程中可能会遇到各种异常,如网络断开、存储空间不足等。我们需要捕获这些异常并作出相应处理,如暂停下载或提示用户。最后,记得关闭输入/输出流。 ```java try { // 下载...
本示例重点讲解如何利用Java内置的HttpURLConnection类来完成这个任务。HttpURLConnection是Java标准库提供的一种轻量级的HTTP客户端接口,适用于简单的HTTP通信场景。 首先,我们来看一下上传文件的基本流程: 1....
这个类提供了一种高效且灵活的方式来发送HTTP请求并接收响应,是替代过时的`java.net.URL`和`java.net.HttpURLConnection`的一个优秀选择。本篇文章将深入探讨如何使用`HttpURLConnection`以POST方式提交请求。 ###...
例如,`JSONObject`和`JSONArray`类分别用于解析JSON对象和数组。我们可以通过`get()`或`opt()`方法获取键值,`has()`检查键是否存在,`put()`添加键值对等。 4. RESTful服务: 提到的“RESTfulExample”可能指的...
除了基本的请求和响应处理,HttpURLConnection还支持设置连接超时和读取超时,这对于防止程序在等待响应时阻塞非常重要: ```java connection.setConnectTimeout(5000); // 设置连接超时为5秒 connection....
这次的HttpURLConnection仅针对Http连接,效率胜于URLConnection。new URL对象将网址传入 HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();// 取得连接 conn.connect(); ...