您的位置:首页 > 理论基础 > 计算机网络

java http url post json

2016-03-25 16:09 513 查看
Java代码


import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;

import java.net.URL;

public class Copy_2_of_PostDemo {

final static String url = "";

final static String params = "{\"id\":\"12345\"}";

/**

* 发送HttpPost请求

*

* @param strURL

* 服务地址

* @param params

* json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号<br/>

* @return 成功:返回json字符串<br/>

*/

public static String post(String strURL, String params) {

System.out.println(strURL);

System.out.println(params);

try {

URL url = new URL(strURL);// 创建连接

HttpURLConnection connection = (HttpURLConnection) url

.openConnection();

connection.setDoOutput(true);

connection.setDoInput(true);

connection.setUseCaches(false);

connection.setInstanceFollowRedirects(true);

connection.setRequestMethod("POST"); // 设置请求方式

connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式

connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式

connection.connect();

OutputStreamWriter out = new OutputStreamWriter(

connection.getOutputStream(), "UTF-8"); // utf-8编码

out.append(params);

out.flush();

out.close();

// 读取响应

int length = (int) connection.getContentLength();// 获取长度

InputStream is = connection.getInputStream();

if (length != -1) {

byte[] data = new byte[length];

byte[] temp = new byte[512];

int readLen = 0;

int destPos = 0;

while ((readLen = is.read(temp)) > 0) {

System.arraycopy(temp, 0, data, destPos, readLen);

destPos += readLen;

}

String result = new String(data, "UTF-8"); // utf-8编码

System.out.println(result);

return result;

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return "error"; // 自定义错误信息

}

public static void main(String[] args) {

post(url, params);

}

}

备注

httpUrlConnection.setDoOutput(true);以后就可以使用conn.getOutputStream().write()
httpUrlConnection.setDoInput(true);以后就可以使用conn.getInputStream().read();

get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。
post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。

因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: