`

HttpURLConnection 调用get,post接口,读取返回字符串

阅读更多

场景:工程师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;
    }

 

分享到:
评论

相关推荐

    service_java接口远程调用_get、post、带参数远程调用_

    5. **处理响应**:无论GET还是POST,发送请求后都需要读取服务器返回的响应。这通常涉及设置输入流,读取响应内容,解析成JSON或其他格式,然后根据业务需求处理结果。 6. **错误处理**:在进行远程调用时,需要...

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的应用。 首先,`HttpURLConnection`是`java.net.URLConnection`的一个子类,用于处理HTTP协议。在使用`...

    androd httpurlconnection(工具类) get post t

    这个Demo主要展示了如何使用HTTPUrlConnection进行GET和POST请求,以及图片的下载操作。下面将详细讲解这些知识点。 首先,我们来看GET请求。GET是HTTP协议中最常见的请求方法,通常用于获取服务器上的资源。在...

    Android httpUrlConnection Post方式访问网络简单demo

    2. **设置请求方法**:默认情况下,`HttpURLConnection`会使用GET方法,但我们需要POST,所以需要调用`setRequestMethod("POST")`。 3. **允许输出**:POST请求需要向服务器发送数据,因此需要调用`setDoOutput...

    HttpURLConnectionTest_Get_Post(绝对可以用)

    数据通常附在URL后面,以查询字符串的形式传递。而POST方法则用于向服务器提交数据,数据包含在请求体中,适用于上传文件或发送大量数据。 **GET请求的实现:** 1. 创建`URL`对象,指定请求的URL。 2. 通过`URL`...

    HttpURLConnection读取本地目录上传远程服务器

    2. **设置请求方法**:由于默认的请求方法是GET,我们需要调用`setRequestMethod("POST")`来改变为POST。 3. **设置输入流**:由于我们要上传数据,所以需要将连接设置为允许输入,调用`setDoInput(true)`。 4. **...

    Java自带的HttpURLConnection访问接口实现文件上传

    这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要...

    android使用HTTPURLconnection/get方法访问HTTP

    3. **设置请求方法**:默认情况下,`HttpURLConnection`使用POST方法,但我们需要设置为GET方法: ```java connection.setRequestMethod("GET"); ``` 4. **设置连接属性**:你可以根据需要设置一些连接属性,如...

    Http学习之使用HttpURLConnection发送post和get请求 android

    本篇文章主要聚焦于使用`HttpURLConnection`类...总结,本文介绍了使用`HttpURLConnection`在Android中发送GET和POST请求的基本步骤,以及需要注意的关键点。理解这些概念有助于开发者在构建网络功能时做出明智的选择。

    java调用百度翻译接口简单实例

    在Java中,我们可以使用`java.net.URL`和`java.net.HttpURLConnection`类来发送GET或POST请求。 1. **创建HTTP请求**:在Java中,创建一个GET请求可以使用`URL`和`HttpURLConnection`类。首先,构造一个URL对象,...

    http发送Get和Post请求工具类

    `sendGetRequest`方法会构建一个URL字符串,将所有参数附加到URL路径后,然后使用`HttpURLConnection`或者第三方库如Apache HttpClient、OkHttp来发起请求。返回的数据通常以字符串形式。 2. **POST请求**: - ...

    java实现读取证书访问https接口

    本篇文章将深入探讨如何在Java中实现读取不同格式(如cer、der、crt)的证书,以及如何使用这些证书访问HTTPS接口并获取返回数据。 首先,我们需要了解证书的基本概念。证书通常包含了公钥和一些身份信息,由受信任...

    Java调用百度翻译接口

    在IT行业中,API(应用程序编程接口)的使用十分常见,它们允许不同的软件系统之间进行通信。本案例聚焦于使用Java语言调用百度翻译API来实现文本的翻译功能。百度翻译API提供了一种高效且便捷的方式来处理多语言...

    HttpUrlConnection使用示例

    这通常通过调用`URL`对象的`openConnection()`方法实现,然后强制转换为`HttpURLConnection`类型: ```java URL url = new URL("http://example.com/api"); HttpURLConnection connection = (HttpURLConnection) ...

    安卓网络通信之通过GET和POST方式提交参数给web应用

    使用`HttpURLConnection`进行POST请求的流程与GET类似,但有几点不同: 1. 在设置请求方法为`POST`之后,需要使用`setDoOutput(true)`开启输出流。 2. 使用`getOutputStream()`获取输出流,然后写入要发送的数据。...

    java使用url发送post和get请求:HttpConnUtils.jar

    - 对于POST请求,参数通常以键值对形式组织成字符串,然后写入到输出流中。 4. **使用HttpURLConnection** - Java内置的`HttpURLConnection`是处理HTTP请求的标准API,提供了设置请求方法、添加请求头、处理响应...

    http请求(get和post)的java实现

    在这里,`trimToEmpty()`方法用于去除字符串前后的空格,并在字符串为空时返回空字符串。 ### 示例应用 在实际使用`HttpUtils`类时,你可以如下调用`reqForPost`方法: ```java String postUrl = ...

    android httpget post

    在实际应用中,POST请求相比GET请求通常能传输更多和更复杂的数据,因为GET请求的URL长度有限制,而POST数据则不受此限制。然而,POST请求不会被浏览器缓存,且可能在某些情况下留下访问记录,安全性相对较低。 ...

    http.rar httpurlconnection

    无论GET还是POST,都可以通过`InputStream`读取服务器返回的数据,通过`HttpURLConnection.getResponseCode()`检查服务器响应的状态码,以判断请求是否成功。 在实际开发中,HTTP URLConnection相比于其他HTTP...

    HttpURLConnection文件下载\httpURLConnection文件下载

    通过设置`setDoOutput(true)`表明这是一个POST请求,但实际上对于文件下载,通常使用GET请求。然后通过`connect()`方法建立连接。 `setConnectTimeout()`和`setReadTimeout()`可以设置超时时间,防止在网络状况差时...

Global site tag (gtag.js) - Google Analytics