java原生封装_Java原生http示例

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值