Java模拟http请求的方法很多,一般使用功能强大apache http client,能够方便为我们做很多事情,不过它基于很深层的封装,也有其复杂之处。
这里演示一个Java原生方法http请求代码示例,个人感觉很清晰和小巧,作为记忆留存。public class HttpClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
//需要放入请求流中的字符串
String s = "123=ABCD你好hello流";
System.out.println(s);
//从这里开始起http请求
//构造节点流
ByteArrayInputStream in = new ByteArrayInputStream(
s.getBytes("utf-8"));
URL url = new URL("http://eim.soyoung.com.cn/sys/wechat");
//openConnection打开连接,此处并没有真正开始请求
URLConnection urlConnection = url.openConnection();
//将URLConnection对象转化为HttpURLConnection对象
HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在流里,需要设置为true,默认false
httpUrlConnection.setDoInput(true);
//设置是否从httpUrlConnection读入(response内容),默认true
httpUrlConnection.setDoOutput(true);
//Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setConnectTimeout(5000);
// 设置request headers属性,Content-type属性很重要,服务器端根据这个值来处理消息内容,可自定义扩展;对应的还有一个Content-length,如果不清楚则不要填写
httpUrlConnection.setRequestProperty("Content-type","application/json");
//请求类型POST或GET,默认是GET
httpUrlConnection.setRequestMethod("POST");
// 连接,从上述url.openConnection()至此的配置必须要在connect之前完成
httpUrlConnection.connect();
//打开http流管道,写入数据(post给服务器端的数据)。此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述的connect()也可以)
OutputStream outStrm = httpUrlConnection.getOutputStream();
//写入数据流的方法
int count = 0;
byte[] buffer = new byte[1024];
while ((count = in.read(buffer)) != -1) {
outStrm.write(buffer, 0, count);
}
outStrm.flush();
outStrm.close();
//<===注意,实际发送请求的代码段就在这里,将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端
InputStream inStrm = httpUrlConnection.getInputStream();
//再次实用节点流,接收response回来的信息
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] retdata = new byte[1024];
int c = -1;
while ((c = inStrm.read(retdata, 0, 1024)) != -1)
outStream.write(retdata, 0, c);
outStream.flush();
outStream.close();
retdata = null;
String rets = new String(outStream.toByteArray(), "utf-8");
System.out.println("=============================inStrm:" + rets);
if (httpUrlConnection.getResponseCode() == 200) {
System.out.println("ok");
} else {
System.out.println("fail");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}