http协议
1要有一个http接口
2初始化一个HttpURLConnection对象
conn = (HttpURLConnection) new URL(servletURL).openConnection();
3.设置基本参数和属性
4传参
5接受返回参数
下面代码是BODY形式的POST请求例子
public GetDataFromServer sendObjToServerJson(PostDataToServer _obj) {
//服务端返回对象
GetDataFromServer fs = null;
//最终要返回给客户端的字符串
String errorStr = null;
//出错时把异常也记录下来
Exception exception = null;
//Http连接
HttpURLConnection conn = null;
//出 流对象
OutputStream objOut = null;
//入 流对象
InputStream objIn = null;
try {
String servletURL =
"https://mp.toutiao.com/profile_v4/graphic/publish";
//可读/写 初始化HttpURLConnection
conn = (HttpURLConnection) new URL(servletURL).openConnection();
/// 可输出信息
conn.setDoOutput(true);
//** 如果不需要读取服务端返回数据时,则不需要显示设置c.setDoInput(false),
//** 如果需要读取则需要c.setDoInput(true),一定要注意这一点!
//** [附言]如果不需要读取服务端数据时,且错误地显示设置c.setDoInput(false)则服务端将无法接收到客户
//** 端请求(正确的做法是不需要显示设置它!)
// 需传回信息
conn.setDoInput(true);
// 不需要缓存
conn.setUseCaches(false);
//设置请求方式
conn.setRequestMethod("POST")
//设置请求参数为json格式
conn.setRequestProperty("Content-Type", "application/json");
//额外头信息
conn.setRequestProperty("token", "token123");
//超时时间
conn.setConnectTimeout(30 * 1000);
//传参start
//将传参转换为json格式的字符串
String json = new Gson().toJson(_obj);
byte[] bs = json.getBytes("UTF-8");
OutputStream out = conn.getOutputStream();
out.write(bs);
out.flush();
out.close();
objOut = out;
//传参end
//接收参数 start
GetDataFromServer[] dfses = new GetDataFromServer[1];
InputStream is = conn.getInputStream();
int ch;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((ch = is.read()) != -1)
bos.write(ch);
is.close();
byte[] bs = bos.toByteArray();
bos.close();
// 接收的数据是JSON文本描述的GetDataFromServer对象
String res = new String(bs, "UTF-8");
dfsesHandle[0] = new Gson().fromJson(res, GetDataFromServer.class);
objIn= is;
//将GetDataFromServer对象保存下来
fs = dfses[0];
//接收参数end
} catch (Exception e) {
errorStr = "May be due to network connectivity problems, " + e.getMessage();
exception = e;
e.printStackTrace();
} finally {
try {
if (objOut != null) {
objOut.close();
objOut = null;
}
if (conn != null) {
conn.disconnect();
conn = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
//到了这一步还是null表示与服务端交互的过程中出错了
//那么接下来实例化的这个对象主要就是存放错误信息了(用于提示用户)
if (fs == null) {
fs = new GetDataFromServer();
fs.setCode(Const.HTTP_CODE_ERROR);
fs.setMsg("Exception cause for sending datas." + errorStr + exception.getCause());
return fs;
}
public class PostDataToServer {
protected boolean doInput = true;
protected Object newData;
protected Object oldData;
protected String token = null;
public PostDataToServer() {
}
public static PostDataToServer n() {
return new PostDataToServer();
}
public Object getNewData() {
return this.newData;
}
public PostDataToServer setNewData(Object newData) {
this.newData = newData;
return this;
}
public Object getOldData() {
return this.oldData;
}
public PostDataToServer setOldData(Object oldData) {
this.oldData = oldData;
return this;
}
public boolean isDoInput() {
return this.doInput;
}
public void setDoInput(boolean doInput) {
this.doInput = doInput;
}
public String getToken() {
return this.token;
}
public void setToken(String token) {
this.token = token;
}
}
public class GetDataFromServer implements Serializable {
private int code;
private String msg;
private Object data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}