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;
}    
}

 

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