zoukankan      html  css  js  c++  java
  • Java 模拟发送 http 请求并传输 JSON 数据

    前言

    近日在做安卓的服务端开发,由于对安卓一窍不通,又需要测试服务器功能,于是想着用 java 来模拟对服务器的请求。实现以 JSON 为主体的数据交互。以下代码参考了zhuawang's blog

    代码

    首先通过url建立一个连接

      URL realUrl = new URL("123.123.123.123:8080/test/");
      // 打开和URL之间的连接
      URLConnection conn = realUrl.openConnection();
    

    接着设置以下请求的属性

      //注意在传送 json 数据时注意设置 Content-Type 的值
      conn.setRequestProperty("Content-Type", "application/json");
      conn.setRequestProperty("connection", "keep-alive");
      // 传送 json 数据一般是用 POST
      // 发送 POST 请求必须设置如下两行
      conn.setDoOutput(true);
      conn.setDoInput(true);
    

    最后写入要传输的参数

    // 获取URLConnection对象对应的输出流
    out = new PrintWriter(conn.getOutputStream());
    // 发送请求参数
    out.write(param);
    // flush输出流的缓冲
    out.flush();
    

    最后你可以看看发出的请求返回了什么样的响应结果

    in = new BufferedReader(new InputStreamReader(
                            conn.getInputStream()));
    String line;
    while ((line = in.readLine()) != null) {
        result += line;
    }
    

    完整逻辑代码

    
    package com.amoyzhp.http;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import org.json.JSONObject;
    
    public class HttpRequest {
    
    	public static String sendPost(String url, String param)
      {  
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                //注意在传送json数据时, Content-Type的值
                conn.setRequestProperty("Content-Type",
                                        "application/json");
                conn.setRequestProperty("connection", "keep-alive");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.write(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result;
        }
    
    	public static void main(String[] args)
    	{
    
      	    JSONObject obj = new JSONObject();
            obj.put("username", "test1");
            obj.put("password", "test1");
            String url = "http://localhost:8080/JobHunter/login";
            //发送 POST 请求
            String str = HttpRequest.sendPost( url, obj.toString());
            System.out.println(str);
        }
    }
    

    我的个人主页:http://amoyzhp.com/
  • 相关阅读:
    14-6 XShell连接远程服务器
    14-5 XManager工具安装
    14-4 本地私有化部署方案介绍
    14-3 阿里云域名购买及备案流程
    14-2 阿里云ECS服务器购买介绍
    13-7 Docker基本使用总结
    初识Redux-Saga
    React Native填坑之旅 -- FlatList
    React Native填坑之旅 -- 使用react-navigation代替Navigator
    React Native填坑之旅 -- 回归小插曲
  • 原文地址:https://www.cnblogs.com/amoy-zhp/p/7519020.html
Copyright © 2011-2022 走看看