java中post和get请求

示例代码:

package com.shareboxes.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.junit.Ignore;
import org.junit.Test;

/**
* @ClassName: HttpRequest
* @Description: get,post请求
* @author Administrator
* @date 2015年10月19日
*
 */

public class HttpRequest {

    /**
    * @Title: sendGet
    * @Description: get请求
    * @param url
    * @param param
     */
    public static String sendGet(String url, Map<String, String> param) {
        BufferedReader bReader = null;
        StringBuffer sBuffer = new StringBuffer();
        String realUrl = url;

        try {

            if (param.size() > 0) {
                realUrl += "?";
                for (Entry<String, String> entry : param.entrySet()) {
                    realUrl += entry.getKey() + "=" + entry.getValue() + "&";
                }
                realUrl = realUrl.substring(0, realUrl.length() - 1);
            }

            URL urlString = new URL(realUrl);
            URLConnection urlConnection = urlString.openConnection();
            HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
            httpURLConnection.setRequestMethod("GET");// 设置请求方法
            httpURLConnection.setConnectTimeout(30000);// 连接主机超时时间
            httpURLConnection.setReadTimeout(30000);// 读取数据超时时间
            httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置请求数据的格式
            httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");// 设置接收数据的编码

            // 判断连接是否异常
            if (httpURLConnection.getResponseCode() >= 300) {
                throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
            }

            System.out.println(httpURLConnection.getResponseCode());
            for(Entry<String, List<String>>entry:httpURLConnection.getHeaderFields().entrySet()){
                System.out.println(entry.getKey()+"--------->"+entry.getValue());
            }

            bReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
            String line = null;
            while ((line = bReader.readLine()) != null) {
                sBuffer.append(line);
            }
        } catch (Exception e) {
            System.out.println("get 请求发生错误!!!");
            e.printStackTrace();
        } finally {
            if (bReader != null) {
                try {
                    bReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sBuffer.toString();
    }

    /**
    * @Title: sendPost
    * @Description: post请求
    * @param url
    * @param param
     */
    public static String sendPost(String url, Map<String, String> param) {
        BufferedReader bReader = null;
        OutputStreamWriter out = null;
        StringBuffer sBuffer = new StringBuffer();
        String parameterData ="";

        try {
            if (param.size() > 0) {
                for (Entry<String, String> entry : param.entrySet()) {
                    parameterData += entry.getKey() + "=" + entry.getValue() + "&";
                }
                parameterData = parameterData.substring(0, parameterData.length() - 1);
            }

            URL realUrl = new URL(url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) realUrl.openConnection();

            httpURLConnection.setConnectTimeout(30000);
            httpURLConnection.setReadTimeout(30000);
            httpURLConnection.setRequestMethod("POST");

            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setUseCaches(false);
            httpURLConnection.setInstanceFollowRedirects(true);

            httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置请求参数的格式
            httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");// 接收数据的编码

            if((parameterData.trim().length()>0) && (!parameterData.equals(""))){
                out = new OutputStreamWriter(httpURLConnection.getOutputStream(), "utf-8");
                out.write(parameterData);
                out.flush();
            }

            // 判断连接是否异常
            if (httpURLConnection.getResponseCode() >= 300) {
                throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
            }

            System.out.println(httpURLConnection.getResponseCode());
            for(Entry<String, List<String>>entry:httpURLConnection.getHeaderFields().entrySet()){
                System.out.println(entry.getKey()+"--------->"+entry.getValue());
            }

//            bReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "utf-8"));
//            String line = null;
//            while ((line = bReader.readLine()) != null) {
//                sBuffer.append(line);
//            }

            InputStream in=httpURLConnection.getInputStream();
            byte []data=new byte[httpURLConnection.getContentLength()];
            int offset=0;
            while(offset<in.available()){
                offset+=in.read(data, offset, in.available()-offset);
                System.out.println(offset);
            }
            sBuffer.append(new String(data,"utf-8"));
        } catch (Exception e) {
            System.out.println("post 请求失败!!!");
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (bReader != null) {
                    bReader.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return sBuffer.toString();
    }

    @Test
    @Ignore
    public void testGet() {
        Map<String, String> param = new HashMap<String, String>();
        param.put("tid", "1");
        System.out.println(sendGet("http://localhost:8080/shareboxes/record/getrecord/tid.do", param));
    }

    @Test
    public void testPost() {
        Map<String, String> param = new HashMap<String, String>();
        param.put("tid", "1");
        System.out.println(sendPost("http://localhost:8080/shareboxes/record/getrecord/tid.do", param));
    }

}
时间: 2024-10-25 01:33:13

java中post和get请求的相关文章

Java中Socket在发送请求的时候要分清print()和println()

近期在开发中需要一个功能,向第三方服务器发送我方数据的功能,对数据的封装格式要求特别严格,在组装数据完成后,发送给第三方服务器却怎么也通不过,查找了好久,也对比了对方给出来的数据样本,还是不行,后来检查代码和拦截发送的数据后才发现,在socket发送的时候,使用的是println()方法,这个方法会自动在数据的后面加上一个回车符,所以在对比数据的时候没有发现,改为print()后顺利通过了~~~

spring MVC 管理HttpClient---实现在java中直接向Controller发送请求

在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实现. 首先用到的包是httpclient-4.3.5.jar和httpcore-4.3.2.jar 先看下面代码: package module.system.common; import java.io.IOException; import java.util.ArrayList; import

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

关于java中的本地缓存-总结概述

java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了.   为什么要有本地缓存? 在 系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减 少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略. 为什么是本地缓存,而

读懂Java中的Socket编程(转)

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. 餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个

Java中的TCP/UDP网络通信编程

127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口. 网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议. Socket连接套接字,

Java中ConcurrentHashMap的实现

Java中ConcurrentHashMap的实现 ConcurrentHashMap(简写CHM)引入了分割,并提供了HashTable支持的所有的功能.在CHM中,支持多线程对Map做读操作,并且不需要任何的blocking.这得益于CHM将Map分割成了不同的部分,在执行更新操作时只锁住一部分.根据默认的并发级别(concurrency level),Map被分割成16个部分,并且由不同的锁控制.这意味着,同时最多可以有16个写线程操作Map.试想一下,由只能一个线程进入变成同时可由16个

Java中容易被你忽略的细节(一)

1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来说都是使用synchronized方法 每一个对象都有一个监视器,或者叫做锁. java用监视器机制实现了进程之间的异步执行 2.Struts框架基于MVC模式 Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xm

Java中的类加载器

转载:http://blog.csdn.net/zhangjg_blog/article/details/16102131 从java的动态性到类加载机制 我们知道,Java是一种动态语言.那么怎样理解这个"动态"呢?或者说一门语言具备了什么特性,才能称之为动态语言呢?对于java,我是这样理解的. 我们都知道JVM(java虚拟机)执行的不是本地机器码指令,而是执行一种称之为字节码的指令(存在于class文件中).这就要求虚拟机在真正执行字节码之前,先把相关的class文件加载到内存