场景:工程师A写了一个基于HTTP的接口(http://127.0.1.2:8080/test/url?param=12&test=asdf&test)这个接口会返回Y,或者N
工程师B现在调用这个接口的方法,见代码!
我们来使用JDK的UR类,和HttpURLConnection
InputStreamReader,BufferedReader,来解决该问题。
package com.cplatform.movie.back.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; public class HttpURLConnectionTest { public static final String GET_URL = "http://112.4.27.9/mall-back/if_user/store_list?storeId=32"; public static final String POST_URL = "http://112.4.27.9/mall-back/if_user/store_list"; /** * 接口调用 GET */ public static void httpURLConectionGET() { try { URL url = new URL(GET_URL); // 把字符串转换为URL请求地址 HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打开连接 connection.connect();// 连接会话 // 获取输入流 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) {// 循环读取流 sb.append(line); } br.close();// 关闭流 connection.disconnect();// 断开连接 System.out.println(sb.toString()); } catch (Exception e) { e.printStackTrace(); System.out.println("失败!"); } } /** * 接口调用 POST */ public static void httpURLConnectionPOST () { try { URL url = new URL(POST_URL); // 将url 以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接) HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此时cnnection只是为一个连接对象,待连接中 // 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数) connection.setDoOutput(true); // 设置连接输入流为true connection.setDoInput(true); // 设置请求方式为post connection.setRequestMethod("POST"); // post请求缓存设为false connection.setUseCaches(false); // 设置该HttpURLConnection实例是否自动执行重定向 connection.setInstanceFollowRedirects(true); // 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数) // application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行) connection.connect(); // 创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容) DataOutputStream dataout = new DataOutputStream(connection.getOutputStream()); String parm = "storeId=" + URLEncoder.encode("32", "utf-8"); //URLEncoder.encode()方法 为字符串进行编码 // 将参数输出到连接 dataout.writeBytes(parm); // 输出完成后刷新并关闭流 dataout.flush(); dataout.close(); // 重要且易忽略步骤 (关闭流,切记!) System.out.println(connection.getResponseCode()); // 连接发起请求,处理服务器响应 (从连接获取到输入流并包装为bufferedReader) BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuilder sb = new StringBuilder(); // 用来存储响应数据 // 循环读取流,若不到结尾处 while ((line = bf.readLine()) != null) { sb.append(bf.readLine()); } bf.close(); // 重要且易忽略步骤 (关闭流,切记!) connection.disconnect(); // 销毁连接 System.out.println(sb.toString()); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // httpURLConectionGET(); httpURLConnectionPOST(); } }
直接测试,ok 输出的sb值,就是接口返回的Y或者N!
问题补充:
// 解gzip码
public static InputStream unGzip(InputStream in) { try { GZIPInputStream gzip = new GZIPInputStream(in); byte[] buf = new byte[1024]; int len; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((len = gzip.read(buf)) != -1) { baos.write(buf, 0, len); } byte[] b = baos.toByteArray(); ByteArrayInputStream bs = new ByteArrayInputStream(b); baos.flush(); baos.close(); gzip.close(); return new DataInputStream(bs); } catch (Exception e) { e.printStackTrace(); } return null; }
相关推荐
5. **处理响应**:无论GET还是POST,发送请求后都需要读取服务器返回的响应。这通常涉及设置输入流,读取响应内容,解析成JSON或其他格式,然后根据业务需求处理结果。 6. **错误处理**:在进行远程调用时,需要...
本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的应用。 首先,`HttpURLConnection`是`java.net.URLConnection`的一个子类,用于处理HTTP协议。在使用`...
这个Demo主要展示了如何使用HTTPUrlConnection进行GET和POST请求,以及图片的下载操作。下面将详细讲解这些知识点。 首先,我们来看GET请求。GET是HTTP协议中最常见的请求方法,通常用于获取服务器上的资源。在...
2. **设置请求方法**:默认情况下,`HttpURLConnection`会使用GET方法,但我们需要POST,所以需要调用`setRequestMethod("POST")`。 3. **允许输出**:POST请求需要向服务器发送数据,因此需要调用`setDoOutput...
数据通常附在URL后面,以查询字符串的形式传递。而POST方法则用于向服务器提交数据,数据包含在请求体中,适用于上传文件或发送大量数据。 **GET请求的实现:** 1. 创建`URL`对象,指定请求的URL。 2. 通过`URL`...
2. **设置请求方法**:由于默认的请求方法是GET,我们需要调用`setRequestMethod("POST")`来改变为POST。 3. **设置输入流**:由于我们要上传数据,所以需要将连接设置为允许输入,调用`setDoInput(true)`。 4. **...
这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要...
3. **设置请求方法**:默认情况下,`HttpURLConnection`使用POST方法,但我们需要设置为GET方法: ```java connection.setRequestMethod("GET"); ``` 4. **设置连接属性**:你可以根据需要设置一些连接属性,如...
本篇文章主要聚焦于使用`HttpURLConnection`类...总结,本文介绍了使用`HttpURLConnection`在Android中发送GET和POST请求的基本步骤,以及需要注意的关键点。理解这些概念有助于开发者在构建网络功能时做出明智的选择。
在Java中,我们可以使用`java.net.URL`和`java.net.HttpURLConnection`类来发送GET或POST请求。 1. **创建HTTP请求**:在Java中,创建一个GET请求可以使用`URL`和`HttpURLConnection`类。首先,构造一个URL对象,...
`sendGetRequest`方法会构建一个URL字符串,将所有参数附加到URL路径后,然后使用`HttpURLConnection`或者第三方库如Apache HttpClient、OkHttp来发起请求。返回的数据通常以字符串形式。 2. **POST请求**: - ...
本篇文章将深入探讨如何在Java中实现读取不同格式(如cer、der、crt)的证书,以及如何使用这些证书访问HTTPS接口并获取返回数据。 首先,我们需要了解证书的基本概念。证书通常包含了公钥和一些身份信息,由受信任...
在IT行业中,API(应用程序编程接口)的使用十分常见,它们允许不同的软件系统之间进行通信。本案例聚焦于使用Java语言调用百度翻译API来实现文本的翻译功能。百度翻译API提供了一种高效且便捷的方式来处理多语言...
这通常通过调用`URL`对象的`openConnection()`方法实现,然后强制转换为`HttpURLConnection`类型: ```java URL url = new URL("http://example.com/api"); HttpURLConnection connection = (HttpURLConnection) ...
使用`HttpURLConnection`进行POST请求的流程与GET类似,但有几点不同: 1. 在设置请求方法为`POST`之后,需要使用`setDoOutput(true)`开启输出流。 2. 使用`getOutputStream()`获取输出流,然后写入要发送的数据。...
- 对于POST请求,参数通常以键值对形式组织成字符串,然后写入到输出流中。 4. **使用HttpURLConnection** - Java内置的`HttpURLConnection`是处理HTTP请求的标准API,提供了设置请求方法、添加请求头、处理响应...
在这里,`trimToEmpty()`方法用于去除字符串前后的空格,并在字符串为空时返回空字符串。 ### 示例应用 在实际使用`HttpUtils`类时,你可以如下调用`reqForPost`方法: ```java String postUrl = ...
在实际应用中,POST请求相比GET请求通常能传输更多和更复杂的数据,因为GET请求的URL长度有限制,而POST数据则不受此限制。然而,POST请求不会被浏览器缓存,且可能在某些情况下留下访问记录,安全性相对较低。 ...
无论GET还是POST,都可以通过`InputStream`读取服务器返回的数据,通过`HttpURLConnection.getResponseCode()`检查服务器响应的状态码,以判断请求是否成功。 在实际开发中,HTTP URLConnection相比于其他HTTP...
通过设置`setDoOutput(true)`表明这是一个POST请求,但实际上对于文件下载,通常使用GET请求。然后通过`connect()`方法建立连接。 `setConnectTimeout()`和`setReadTimeout()`可以设置超时时间,防止在网络状况差时...