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/
  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/amoy-zhp/p/7519020.html
Copyright © 2011-2022 走看看