Java实现Http Post请求

两种请求方式

一 数据类型是json格式

package xxxxxxxxxxxxxx;

import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSONObject;


@RestController
@RequestMapping(value = "/api")
public class OutTestController {
	private final Logger logger = LoggerFactory.getLogger(OutTestController.class);

	@RequestMapping(value = "/testlink", method = RequestMethod.GET)
	public String testlink(@RequestParam(value = "userid", required = false) String userid) {
		logger.info("OutTestController ==> link()");
		String url = "http://xxxxxxxxxxx";
		// 声明json对象
		JSONObject outData = new JSONObject();
		// 把json数组加到json对象中
		outData.put("loginName", "xxxxxxxxx");
		outData.put("password", "xxxxxx");
		String result = OutTestController.doHttpPost(outData, url);
		return result;
	}
	
	/**
	 * 发送Http post请求
	 * 
	 * @return 返回信息
	 */
	public static String doHttpPost(JSONObject outData, String URL) {
		System.out.println("发起的数据:" + outData.toString());
		byte[] xmlData = outData.toString().getBytes();
		InputStream instr = null;
		java.io.ByteArrayOutputStream out = null;
		try {
			URL url = new URL(URL);
			URLConnection urlCon = url.openConnection();
			urlCon.setDoOutput(true);
			urlCon.setDoInput(true);
			urlCon.setUseCaches(false);
			urlCon.setRequestProperty("Accept", "application/json");// 设置接收数据的格式
			urlCon.setRequestProperty("Content-Type", "application/json");// 设置发送数据的格式
			urlCon.setRequestProperty("charset", "utf-8");
			urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length));
			System.out.println(String.valueOf(xmlData.length));
			DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
			printout.write(xmlData);
			printout.flush();
			printout.close();
			instr = urlCon.getInputStream();
			byte[] bis = IOUtils.toByteArray(instr);
			String ResponseString = new String(bis, "UTF-8");
			if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
				System.out.println("返回空");
			}
			System.out.println("返回数据为:" + ResponseString);
			return ResponseString;
		} catch (Exception e) {
			e.printStackTrace();
			return "0";
		} finally {
			try {
				out.close();
				instr.close();
			} catch (Exception ex) {
				return "0";
			}
		}
	}

	
}

	String url = "http://xxxxxxxx";		

    String param = "aa="+aa+"&aa="+aa;			
		    //发送 POST 请求		
	String sr= PigNutritionalFormulaController.sendPost(url,param,"UTF-8");

  public static String sendPost(String url, String param,String charset) { 
    OutputStreamWriter out = null;
    BufferedReader in = null;
    String result = "";
    String line;
    StringBuffer sb=new StringBuffer();
    try {
        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        URLConnection conn = realUrl.openConnection();
        // 设置通用的请求属性
   //     conn.setRequestProperty("accept", "*/*");
     //   conn.setRequestProperty("connection", "Keep-Alive");
      //  conn.setRequestProperty("user-agent",
       //         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      //  conn.setRequestProperty("Accept-Charset", "UTF-8");
      //  conn.setRequestProperty("contentType", "UTF-8");
        conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
       // conn.setRequestProperty("Accept-Language", "zh-cn");
        conn.setRequestProperty("Charset", "utf-8");
        conn.setConnectTimeout(1000000);
        conn.setReadTimeout(10000000);
       // conn.setRequestProperty("Accept-Language", Locale.getDefault().toString());
        // 发送POST请求必须设置如下两行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 获取URLConnection对象对应的输出流
        out = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");
        // 发送请求参数
        out.write(param);
//        out.print(param);
        // flush输出流的缓冲
        out.flush();
        // 定义BufferedReader输入流来读取URL的响应
        in = new BufferedReader(
                new InputStreamReader(conn.getInputStream(),charset));
        while ((line = in.readLine()) != null) {
        	sb.append(line);
        }
        result=sb.toString();
    } 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;
}    
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章