使用UrlConnection实现后台模拟http请求的简单实例

网友投稿 248 2023-06-20


使用UrlConnection实现后台模拟http请求的简单实例

使用UrlConnection实现后台模拟http请求的简单实例

这两天在整理看httpclient,然后想自己用UrlConnection后台模拟实现Http请求,于是一个简单的小例子就新鲜出炉了(支持代理哦):

public class SimpleHttpTest {

public static String send(String urlStr, Map map,String encoding){

String body="";

StringBuffer sbuf = new StringBuffer();

if(map!=null){

for (Entry entry : map.entrySet()) {

sbuf.append(entry.getKey()).append("=").append(entry.getValue()).append("&");

}

if(sbuf.length()>0){

sbuf.deleteCharAt(sbuf.length()-1);

}

}

// 1、重新对请求报文进行 GBK 编码

byte[] postData = null;

try {

postData = sbuf.toString().getBytes(encoding);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

// 2、发送 HTTP(S) 请求

OutputStream reqStream = null;

InputStream resStream = null;

URLConnection request = null;

try {

System.out.println("交易请求地址:" + urlStr);

System.out.println("参数:" + sbuf.toString()); http://

//A、与服务器建立 HTTP(S) 连接

URL url = null;

try {

Proxy proxy = new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress("127.0.0.1", 8087));

url = new URL(urlStr);

request = url.openConnection(proxy);

request.setDoInput(true);

request.setDoOutput(true);

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//B、指定报文头【Content-type】、【Content-length】 与 【Keep-alive】

request.setRequestProperty("Content-type", "application/x-www-form-urlencoded");

request.setRequestProperty("Content-length", String.valueOf(postData.length));

request.setRequestProperty("Keep-alive", "false");

request.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

//C、发送报文至服务器

reqStream = request.getOutputStream();

reqStream.write(postData);

reqStream.close();

//D、接收服务器返回结果

ByteArrayOutputStream ms = null;

resStream = request.getInputStream();

ms = new ByteArrayOutputStream();

byte[] buf = new byte[4096];

int count;

while ((count = resStream.read(buf, 0, buf.length)) > 0) {

ms.write(buf, 0, count);

}

resStream.close();

body = new String(ms.toByteArray(), encoding);

} catch (UnknownHostException e) {

System.err.println( "服务器不http://可达【" + e.getMessage() + "】");

} catch (IOException e) {

e.printStackTrace();

} finallyhttp:// {

try {

if (reqStream != null)

reqStream.close();

if (resStream != null)

resStream.close();

} catch (Exception ex) {

}

}

System.out.println("交易响应结果:");

System.out.println(body);

return body;

}

public static void main(String[] args) {

String url="http://php.weather.sina.com.cn/iframe/index/w_cl.php";

Map map = new HashMap();

map.put("code", "js");

map.put("day", "0");

map.put("city", "上海");

map.put("dfc", "1");

map.put("charset", "utf-8");

send(url, map,"utf-8");

}

}

结果如下:

交易请求地址:http://php.weather.sina.com.cn/iframe/index/w_cl.php

参数:dfc=1&charset=utf-8&day=0&code=js&city=上海

交易响应结果:

(function(){var w=[];w['上海']=[{s1:'阴',s2:'阴',f1:'yin',f2:'yin',t1:'17',t2:'14',p1:'≤3',p2:'≤3',

d1:'东北风',d2:'东北风'}];var add={now:'2015-11-11 19:04:33',time:'1447239873',update:'

北京时间11月11日17:10更新',error:'0',total:'1'};window.SWther={w:w,add:add};})();//0

代码中的步骤写的很明白了,如果你有心,还可以对该方法进行各种封装,方便使用。下篇我会分享一下httpclient是如何模拟后台来发送http请求的,还有配置ssl、代理、自定义header等等,敬请期待吧。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Java中如何正确书写单例模式
下一篇:过期软件破解办法实例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~