java HttpUrlConnection发送数据

合集下载

java调用外部接口推送数据的方法

java调用外部接口推送数据的方法

java调用外部接口推送数据的方法在使用Java调用外部接口推送数据时,有几种常见的方法可以实现。

以下是其中一种方法的示例:首先,你需要使用Java中提供的相关类和方法来进行HTTP请求。

你可以使用Java的HTTP客户端类,例如HttpClient或HttpURLConnection,这些类可以实现HTTP请求和接收响应。

接下来,你需要构建HTTP请求的参数和数据。

通常,你可以使用JSON或XML格式来传递数据。

你可以使用Java中的相关类来构建请求的数据,并将其转换为所需的格式。

然后,你需要设置HTTP请求的头部信息。

这包括设置请求方法(POST、GET等),请求的内容类型(application/json、application/xml等)以及其他必要的头部信息。

接下来,你可以发送HTTP请求并获取服务器的响应。

你可以使用Java中的方法将请求发送到外部接口,并使用相应的方法获取服务器的响应。

你可以根据需要处理响应的结果。

最后,你需要处理服务器的响应数据。

根据外部接口返回的数据格式,你可以使用相关的Java类进行解析,并根据需要进行后续的处理操作。

需要注意的是,调用外部接口时,你需要确保网络连接的可用性,并正确处理可能出现的异常情况。

你可以使用Java中的异常处理机制来捕获和处理可能出现的异常。

总结起来,使用Java调用外部接口推送数据的方法包括构建HTTP请求参数和数据、设置请求的头部信息、发送HTTP请求、获取服务器的响应并处理响应数据。

通过合理地使用Java的相关类和方法,你可以很容易地实现这个过程。

java URLConnection全面总结(包括cookie的详细操作及上传文件)

java URLConnection全面总结(包括cookie的详细操作及上传文件)

使用URLConnection处理http请求一、准备使用URLConnection操作http request时,我们至少得知道URL地址和字符集,参数是可选的,它基于具体的需求。

String url = "";String charset = "UTF-8";String param1 = "value1";String param2 = "value2";// ...String query = String.format("param1=%s&param2=%s",URLEncoder.encode(param1, charset),URLEncoder.encode(param2, charset));参数必须以name=value的形式出现,不同的参数使用&连接,通常还需要用URLEncoder.encode()方法将参数转化为URL编码String.format()方法会只是为了方便,如果需要多个 + 来操作字符的时候我就喜欢用这个方法。

二、发送一个带参数的get请求这是一段很简单的代码,使用默认的request方法就行URLConnection connection = new URL(url + "?" + query).openConnection();connection.setRequestProperty("Accept-Charset", charset);InputStream response = connection.getInputStream();// ...所有的参数都要放在URL后边,并且使用?连接,头部中的Accept-Charset会告诉服务器你发送的参数使用的是什么编码。

如果你不需要发送任何的参数,可以不用写Accept-Charset,如果你不想发送任何的头部信息,可以直接使用URL.openStream()方法。

java服务器间http通讯,同时传输文件流和数据,并接收返回的文件流或数据

java服务器间http通讯,同时传输文件流和数据,并接收返回的文件流或数据

java服务器间http通讯,同时传输⽂件流和数据,并接收返回的⽂件流或数据废话:这⾥使⽤的是HttpUrlConnection,httpclient没有试过,这篇⽂章也是收集了很多⼤佬的成果,但是由于太久远了找不到原⽂了,如果有⼤佬看到提醒⼀下,愿意贴上原⽂链接的哈,抱歉抱歉,现在实现了同时传输⽂件和数据,但是response返回的⽂件和数据只能接收⼀个,如果⼤家有同时接收的⽅法,望告知,谢谢⼤家了。

需求:其实就是服务器间通过http进⾏通讯,不⾛前端的那种,公司需求给某个⽹址主动发⽂件流,并且接收response中的反馈⽂件流或者错误信息。

连接⼯具类HttpUrlConnection.java,现在⽀持传多个数据,⼀个⽂件,如果需要多个⽂件,照着改改应该没问题的@Componentpublic class HttpUrlConnection {//头部格式private static final String nextLine = "\r\n";private static final String twoHyphens = "--";//随便写⼀个private static final String boundary = java.util.UUID.randomUUID().toString();/*** @Description:java项⽬的服务端之间的通信* @Param: [requestUrl,请求url* jsessionId, 浏览器的访问的Cookie,即被访问的服务端的session。

若被访问的服务器没有做url过滤器,则该参数可以为null。

* file, 发送出去的⽂件* feedbackFile, 收到的反馈⽂件存放位置* name,对⽅⽤来接收⽂件的名字* params,要传的参数* @Return: java.util.Map* @Author: Liting* @Date: 2019-11-26 08:54*/public static Map httpUrlConnection(String requestUrl, String jsessionId, File file, String feedbackFile, String name, Map<String,String> params) throws IOException { HttpURLConnection con = (HttpURLConnection) new URL(requestUrl).openConnection();if (!Utils.isEmpty(jsessionId)) {con.setRequestProperty("Cookie", "JSESSIONID=" + jsessionId);}// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在// http正⽂内,因此需要设为true, 默认情况下是false;con.setDoOutput(true);// 设置是否从httpUrlConnection读⼊,默认情况下是true;con.setDoInput(true);// 设定请求的⽅法为"POST",默认是GETcon.setRequestMethod("POST");// Post 请求不能使⽤缓存con.setUseCaches(false);//设置接收返回值的格式con.setRequestProperty("Accept", "text/plain, */*");//设置接收编码con.setRequestProperty("Accept-Language", "zh-cn");con.setRequestProperty("Host","127.0.0.1");//设置请求参数格式以及boundary分割线con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);con.setRequestProperty("User-Agent"," WinHttpClient");//开启长连接可以持续传输con.setRequestProperty("Connection", "Keep-Alive"); //连接超时时间20秒con.setConnectTimeout(20000); //读取超时时间20秒con.setReadTimeout(20000);OutputStream out = con.getOutputStream();//分隔符头部//拼接参数if (!Utils.isEmpty(params)){int i = 0;for (String paramName : params.keySet()){StringBuffer strBufparam = new StringBuffer();strBufparam.append(twoHyphens);strBufparam.append(boundary);strBufparam.append(nextLine);strBufparam.append("Content-Disposition: form-data;name=\""+paramName+"\"");strBufparam.append(nextLine);strBufparam.append("Content-Type: " + "text/plain");strBufparam.append(nextLine);strBufparam.append("Content-Length: " + params.get(paramName).getBytes().length);strBufparam.append(nextLine);strBufparam.append(nextLine);strBufparam.append(params.get(paramName));i++;if (i!=params.size()){strBufparam.append(nextLine);}out.write(strBufparam.toString().getBytes());}}//拼接⽂件if (!Utils.isEmpty(file)){StringBuffer strBufFile = new StringBuffer();strBufFile.append(nextLine);strBufFile.append(twoHyphens);strBufFile.append(boundary);strBufFile.append(nextLine);strBufFile.append("Content-Disposition: form-data; name=\""+name+"\"; filename=\"" + file.getName() + "\""); strBufFile.append(nextLine);strBufFile.append("Content-Type: " + "application/x-tar");strBufFile.append(nextLine);strBufFile.append("Content-Length: " + file.length());strBufFile.append(nextLine);strBufFile.append(nextLine);//写⼊输出流out.write(strBufFile.toString().getBytes());//读取本地⽂件流FileInputStream inputStream = new FileInputStream(file);byte[] data = new byte[2048];int len = 0;int sum = 0;while ((len = inputStream.read(data)) != -1) {//将读取到的本地⽂件流读取到HttpsURLConnection,进⾏上传out.write(data, 0, len);sum = len + sum;}//⽂件写⼊完成后加回车out.write(nextLine.getBytes());inputStream.close();}//写⼊结束分隔符String footer = nextLine + twoHyphens + boundary + twoHyphens + nextLine;out.write(footer.getBytes());out.flush();out.close();con.connect();int responseCode = con.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {if (!Utils.isEmpty(feedbackFile)) {//有返回⽂件的时候String fileName = "";try {fileName = con.getHeaderField(1).substring(21, con.getHeaderField(1).length() - 1);fileName = "EBDT"+fileName.split("_")[1];System.out.println(fileName);}catch (Exception e){return null;}BufferedInputStream in = new BufferedInputStream(con.getInputStream());File f = new File(feedbackFile);if (!f.exists()) {f.mkdirs();}File res = new File(feedbackFile+"/"+fileName);FileOutputStream fos = new FileOutputStream(res);byte[] by = new byte[1024];int length = 0;while ((length = in.read(by)) != -1) {fos.write(by, 0, length);}fos.close();in.close();con.disconnect();if (Utils.isEmpty(fos)) {return null;}//处理接收到的⽂件//保存到本地Map map = new HashMap();map.put("fileName",fileName);return map;}else{//接收到的return中的值BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));String s = br.readLine();br.close();con.disconnect();try{if (!Utils.isEmpty(s)){Object m = JSONObject.parse(s);Map map = (Map) m;return map;}}catch (Exception e){Map map = new HashMap();map.put("feedback",s);return map;}}return new HashMap();} else {con.disconnect();return null;}}}main⽅法测试public static void main(String[] args) throws IOException {Map<String,String> map = new HashMap<>();map.put("name","张三");map.put("age","23");File file = new File("D:\\1.xml");Map map1 = HttpUrlConnection.httpUrlConnection("http://127.0.0.1/user/addUser", "69e4baee-ff22-4cdf-a73b-6156c5d6d2c1", file, "", "files", map);System.out.println(map1);}结果到这就是全部了,如有问题欢迎留⾔。

Java中HttpURLConnection附件上传的实例详解

Java中HttpURLConnection附件上传的实例详解

Java中HttpURLConnection附件上传的实例详解Java 中HttpURLConnection附件上传的实例详解整合了⼀个⾃⼰写的采⽤Http做附件上传的⼯具,分享⼀下!⽰例代码:/*** 以Http协议传输⽂件**@*****************************/public class HttpPostUtil {private final static char[] MULTIPART_CHARS = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" .toCharArray();private URL url;private HttpURLConnection conn;private String boundary = null;private Map<String, String> textParams = new HashMap<String, String>();private Map<String, File> fileparams = new HashMap<String, File>();public HttpPostUtil(String url) throws Exception {this.url = new URL(url);}// 重新设置要请求的服务器地址,即上传⽂件的地址。

public void setUrl(String url) throws Exception {this.url = new URL(url);}// 增加⼀个普通字符串数据到form表单数据中public void addTextParameter(String name, String value) {textParams.put(name, value);}// 增加⼀个⽂件到form表单数据中public void addFileParameter(String name, File value) {fileparams.put(name, value);}// 清空所有已添加的form表单数据public void clearAllParameters() {textParams.clear();fileparams.clear();}/*** 发送数据到服务器** @return ⼀个字节包含服务器的返回结果的数组* @throws Exception*/public byte[] send() throws Exception {initConnection();try {conn.connect();} catch (SocketTimeoutException e) {throw new Exception(e);}OutputStream connOutStream = new DataOutputStream(conn.getOutputStream());writeFileParams(connOutStream);writeStringParams(connOutStream);writesEnd(connOutStream);InputStream responseInStream = conn.getInputStream();ByteArrayOutputStream responseOutStream = new ByteArrayOutputStream();int len;byte[] bufferByte = new byte[1024];while ((len = responseInStream.read(bufferByte)) != -1) {responseOutStream.write(bufferByte, 0, len);}responseInStream.close();connOutStream.close();conn.disconnect();byte[] resultByte = responseOutStream.toByteArray();responseOutStream.close();return resultByte;}// ⽂件上传的connection的⼀些必须设置private void initConnection() throws Exception {StringBuffer buf = new StringBuffer("----");Random rand = new Random();for (int i = 0; i < 15; i++) {buf.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]); }this.boundary = buf.toString();conn = (HttpURLConnection) this.url.openConnection();conn.setDoOutput(true);conn.setUseCaches(false);conn.setConnectTimeout(3 * 60 * 1000); // 连接超时为10秒conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary);}// 普通字符串数据private void writeStringParams(OutputStream out) throws Exception {Set<String> keySet = textParams.keySet();for (Iterator<String> it = keySet.iterator(); it.hasNext();) {String name = it.next();String value = textParams.get(name);out.write(("--" + boundary + "\r\n").getBytes());out.write(("Content-Disposition: form-data; name=\"" + name + "\"\r\n").getBytes());out.write(("\r\n").getBytes());out.write((encode(value) + "\r\n").getBytes());}}// ⽂件数据private void writeFileParams(OutputStream out) throws Exception {Set<String> keySet = fileparams.keySet();for (Iterator<String> it = keySet.iterator(); it.hasNext();) {String name = it.next();File value = fileparams.get(name);out.write(("--" + boundary + "\r\n").getBytes());out.write(("Content-Disposition: form-data; name=\"" + name+ "\"; filename=\"" + encode(value.getName()) + "\"\r\n").getBytes());out.write(("Content-Type: " + getContentType(value) + "\r\n").getBytes());out.write(("Content-Transfer-Encoding: " + "binary" + "\r\n").getBytes());out.write(("\r\n").getBytes());FileInputStream inStream = new FileInputStream(value);int bytes = 0;byte[] bufferByte = new byte[1024];while ((bytes = inStream.read(bufferByte)) != -1) {out.write(bufferByte, 0, bytes);}inStream.close();out.write(("\r\n").getBytes());}}// 添加结尾数据private void writesEnd(OutputStream out) throws Exception {out.write(("--" + boundary + "--" + "\r\n").getBytes());out.write(("\r\n").getBytes());}// 获取⽂件的上传类型,图⽚格式为image/png,image/jpg等。

Java调用Http请求 -HttpURLConnection

Java调用Http请求 -HttpURLConnection

Java调用Http请求-HttpURLConnectionJava中为我们的网络支持提供了包,能够使我们以编程的方式来访问Web服务功能, Java中的网络编程的知识,主要是学习下该包下的API。

URI——>URLURI:表示的是统一的资源标识,它是以某种统一的方式标识资源的简单字符串。

这种字符串以scheme开头。

URL:表示统一的资源定位器的任务,URL是一种URI。

URN:一般不能为资源提供持久不变的名称,这是统一的资源命名的任务。

URN也是一种URI,但它是全球唯一的、持久不变的,即使资源不再存在或不再使用。

URL类URL类代表一个统一资源定位符,资源可以是简单的目录,也可以是复杂的对象,例如对数据库或搜索引擎的查询。

URL类为我们提供了不同的构造方法1.根据地址构造URLPublicURL(Stringspec);URL url=new URL("")2.根据协议、主机名、端口和文件创造public URL(String protocol,Stringhost,intport,String file)URL封装对象信息URL对象封装了一些对象的信息,比如URL对象的端口号、头内容、主机名、协议名称等HTTP请求的细节——请求行请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1。

java 不同系统之间传输数据的方法

java 不同系统之间传输数据的方法

java 不同系统之间传输数据的方法Java是一种强大且广泛应用的编程语言,用于开发各种类型的应用程序。

在实际开发中,经常需要在不同的系统之间传输数据。

本文将介绍一些常用的方法来实现Java不同系统之间的数据传输。

1. 使用Socket通信Socket通信是一种常用的网络通信方式,可以实现不同系统之间的数据传输。

通过Socket,我们可以在客户端和服务器之间建立一条双向通道进行数据交换。

在Java中,可以使用Java的原生Socket库来实现Socket通信。

客户端和服务器端通过准确的IP地址和端口号来建立连接。

客户端可以使用Socket类来与服务器进行通信,而服务器则使用ServerSocket类监听并接受客户端连接。

2. 使用HTTP协议HTTP协议是一种应用层协议,常用于Web应用程序中。

通过HTTP协议,不同系统之间可以通过发送和接收HTTP请求和响应来进行数据传输。

在Java中,可以使用Java的HttpURLConnection类或者第三方库,如Apache 的HttpClient来实现HTTP通信。

通过发送HTTP请求,可以将数据以请求参数或JSON/XML等格式发送到目标系统,并接收目标系统的HTTP响应。

3. 使用WebServiceWebService是一种通过网络进行通信的软件系统。

它可以使不同系统之间的应用程序通过Web服务接口进行数据传输和交互。

在Java中,可以使用Java的JAX-WS和JAX-RPC等API来开发和使用WebService。

通过定义WebService接口和实现相应的服务端和客户端,可以在不同系统之间轻松地传输数据。

4. 使用消息队列消息队列是一种常用的异步通信方式,允许不同系统之间以消息的形式传递数据。

消息队列将数据发送方发送的消息存储在队列中,接收方从队列中接收并处理消息。

在Java中,可以使用ActiveMQ、RabbitMQ等消息中间件来实现消息队列。

JavaHttpURLConnection发送post请求示例

JavaHttpURLConnection发送post请求示例

JavaHttpURLConnection发送post请求⽰例public static Map<String, Object> invokeCapp(String urlStr, Map<String, Object> params) throws Exception {Map map = new HashMap();// post参数StringBuilder postData = new StringBuilder();for (Map.Entry<String,Object> param : params.entrySet()) {if (postData.length() != 0) {postData.append('&');}postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));postData.append('=');postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));}(postData.toString());byte[] postDataBytes = postData.toString().getBytes("UTF-8");//开始访问HttpURLConnection conn = (HttpURLConnection)(new URL(urlStr)).openConnection();conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));conn.setConnectTimeout(2000);conn.setReadTimeout(5000);conn.setDoOutput(true);conn.getOutputStream().write(postDataBytes);Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));StringBuilder sb = new StringBuilder();for (int c; (c = in.read()) >= 0;) {sb.append((char)c);}in.close();conn.disconnect();String responseStr = sb.toString();("RequestUtils - responseStr <== " + responseStr);if (StringHelper.isEmpty(responseStr)) {responseStr = "{}";}int statusCode = conn.getResponseCode();("RequestUtils - statusCode <== " + statusCode);if (HttpServletResponse.SC_OK == statusCode) {JSONObject dataJson = (JSONObject) JSONObject.parse(responseStr);map = new HashMap(dataJson);}return map;}。

Java利用HttpURLConnection发送post请求上传文件

Java利用HttpURLConnection发送post请求上传文件

Java利用HttpURLConnection发送post请求上传文件文章分类:Java编程在页面里实现上传文件不是什么难事,写个form,加上enctype ="multipart/form-data",在写个接收的就能够够了,没什么难的,若是要用.HttpURLConnection来实现文件上传,还真有点弄头.:-)1.先写个servlet把接收到的 HTTP 信息保留在一个文件中,看一下 form 表单到底封装了什么样的信息。

Java代码public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取输入流,是HTTP协议中的实体内容ServletInputStream in=request.getInputStream();//缓冲区byte buffer[]=new byte[1024];FileOutputStream out=new FileOutputStream("d:\\test.log");int len=sis.read(buffer, 0, 1024);while( len!=-1 ){out.write(buffer, 0, len);len=in.readLine(buffer, 0, 1024);}out.close();in.close();}来一个form表单。

<form name="upform" action="upload.do" method="POST" enctype="multipart/form-data">参数<input type="text" name="username"/><br/>文件1<input type="file" name="file1"/><br/>文件2<input type="file" name="file2"/><br/><input type="submit" value="Submit" /><br /></form>Java代码-----------------------------7da2e536604c8Content-Disposition: form-data; name="username"hello word-----------------------------7da2e536604c8Content-Disposition: form-data; name="file1";filename="D:\haha.txt"Content-Type: text/plainhahahahaha-----------------------------7da2e536604c8Content-Disposition: form-data; name="file2";filename="D:\huhu.txt"Content-Type: text/plainmessihuhu-----------------------------7da2e536604c8--研究下规律发觉有如下几点特点1.第一行是“ -----------------------------7d92221b604bc ”作为分隔符,然后是“ \r\n ” 回车换行符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建一个令牌容器,输入如下命令后可根据提示逐步输入后面的内容:
keytool -genkey -v -alias testabc -keyalg RSA -keysize 1024 -validity 36500 -keystore d:\a1.keystore
说明:
-alias testabc
令牌的别名是 testabc;
从证书库中导出证书: keytool -export -alias 证书别名 -storepass 证书库密码 -file 导出证书文件名.cer -keystore 证书库路径
使用自创建的 keystore 授信目标网站提供的数字证书
导入授信证书
keytool -import -v -alias testbocom -file d:\1.cer -keystore d:\a1.keystore
-keyalg RSA
令牌加密的算法是 RSA;
-keysize 1024
令牌密钥长度是 1024;
-validity 36500
令牌有效时间是 365 天;
-keystore d:\a1.keystore 令牌保存到 D:\ a1.keystorl -import -v -alias testbocom -file d:\1.cer -keystore d:\a1.keystore
HttpURLConnection conn = (HttpURLConnection) myURL.openConnection(); conn.setDoInput(true);
conn.setDoOutput(true); conn.setUseCaches(false);
conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=gb2312"); conn.connect();
说明:
-alias testbocom
设置导入后的证书别名;
-file d:\1.cer
设置将要导入的证书文件位置;
-keystore d:\a1.keystore
设置证书库文件的位置;
向证书库中创建证书: keytool -genkeypair -alias 证书别名 -keyalg RSA -keypass 证书密码 -storepass 证书库密码 -keystore 证书库文件路径
InputStream in=conn.getInputStream(); byte[] b=new byte[1]; ByteArrayOutputStream byteArr=new ByteArrayOutputStream(); int result=0; result=in.read( b ); while( result!=-1 ){
说明:
-alias testbocom
设置导入后的证书别名;
-file d:\1.cer
设置将要导入的证书文件位置;
-keystore d:\a1.keystore
设置证书库文件的位置;
自创建令牌管理器
代码 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.KeyStore;
}catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();
}
使用 HttpURLConnection POST 方式访问目标地址
try { .URL myURL = new URL(null,"http://10.10.0.13:8095/req",new .www.protocol.http.Handler()); //如此定义可兼容 tomcat weblogic
}catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();
}
使用 HttpsURLConnection POST 方式访问单向证书
业务描述
互联网站互相通信发送数据时为了数据安全加密,采用 HTTPS ,SSL 协议;JAVA 利用 HttpClient 访问 HTTPS 需要使用 HttpClient4.X 版本才能够轻 松实现此功能;但由于 HttpClient4.X 要求 java jdk1.6 以上要求较高,很多比较早的服务器运行环境是 1.4JDK 导致运行不了,特此编写此文档,使用 比较基础的,Java 自带的 HttpsURLConnection 类完成单向 HTTPS 访问。
实现步骤
使用 java HttpsURLConnection 访问 HTTPS,共有 2 种方式: 1、通过浏览器访问 HTTPS 地址;此时浏览器会要求下载安装证书;导出浏览器的证书,并且将此证书导入到 java 自带的 jdk 令牌容器(keystore)
内。 2、通过浏览器访问 HTTPS 地址;此时浏览器会要求下载安装证书;导出浏览器的证书,使用 java 自带工具 keytool 创建自己的令牌容器
---- 具体流程步骤省略;
使用 java 自带的 keytool 创建令牌容器
使用 java 自带的 keytools 命令的前提条件是,当请您使用的计算机操作系统中必须安装了 java 运行环境 jdk1.4 或 1.5 或 1.6 或 1.7 等等;并且配 置了 windows 系统环境变量,将 java/lib/bin 文件夹配置到 path 环境变量中。至于 jdk 的安装和环境变量的配置,在此不作详细说明,请另找材料学习。
查看证书库中的某个证书详情: keytool -list -v -alias 证书别名 -keystore 证书库文件路径
查看证书库中的所有证书列表: keytool -list -keystore 证书库文件路径
删除证书库中的某个证书: keytool -delete -alias 证书别名 -keystore 证书库文件路径
(keystore),将导出的证书添加的自己创建的令牌容器(keystore)内;编写 java 代码使用令牌容器(keystore)访问目标地址。以下说明仅对第二种方式进 行详细阐述;
导出目标网站的单向 HTTPS 数字证书
由于火狐浏览器能够同时兼容 windows 和 linux 系统与 java 特性相同,因此建议使用火狐浏览器打开目标网站,导出的数字证书易兼容 java 程序 使用。
HttpURLConnection conn = (HttpURLConnection) myURL.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false);
conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=gb2312"); conn.connect();
InputStream in=conn.getInputStream(); byte[] b=new byte[1]; ByteArrayOutputStream byteArr=new ByteArrayOutputStream();
int result=0; result=in.read( b ); while( result!=-1 ){
StringBuffer param=new StringBuffer(); param.append("name=wangsiyu"); param.append("&age=28"); param.append("&sex=男");
OutputStream out=conn.getOutputStream(); out.write(param.toString().getBytes()); out.flush(); out.close();
byteArr.write(b); result=in.read( b ); }
in.close();
String str=new String(byteArr.toByteArray(),"gb2312"); System.out.println(str);
}catch (MalformedURLException e) { System.out.println("异常:MalformedURLException");
byteArr.write(b); result=in.read( b ); } in.close();
String str=new String(byteArr.toByteArray(),"gb2312"); System.out.println(str);
}catch (MalformedURLException e) { System.out.println("异常:MalformedURLException");
Java 使用 Https/HttpURLConnection 发送数据
相关文档
最新文档