一,从Internet获取数据:
1,利用HttpURLConnection对象,我们可以从网络中获取网页数据.
URL url = new URL("http://www.sohu.com");
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);//设置连接超时
conn.setRequestMethod(“GET”);//以get方式发起请求
if (conn.getResponseCode() != 200)
throw new RuntimeException("请求url失败");
InputStreamis = conn.getInputStream();//得到网络返回的输入流
String result = readData(is,"GBK");
conn.disconnect();
//第一个参数为输入流,第二个参数为字符集编码
public static String readData(InputStream inSream, String charsetName) throws Exception{
ByteArrayOutputStream outStream =new ByteArrayOutputStream();
byte[] buffer =new byte[1024];
int len =0;
while( (len = inSream.read(buffer)) != -1 ){
outStream.write(buffer,0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inSream.close();
return newString(data, charsetName);
2,利用HttpURLConnection对象,我们可以从网络中获取文件数据.
URL url = new URL("http://photocdn.sohu.com/20100125/Img269812337.jpg");
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200)
throw new RuntimeException("请求url失败");
InputStreamis = conn.getInputStream();
readAsFile(is,"Img269812337.jpg");
public static void readAsFile(InputStream inSream, File file) throws Exception{
FileOutputStream outStream =new FileOutputStream(file);
byte[] buffer =new byte[1024];
int len =0;
while( (len =inSream.read(buffer)) != -1 ){
outStream.write(buffer,0, len);
}
outStream.close();
inSream.close();
}
二,向Internet发送请求参数
1,利用HttpURLConnection对象,我们可以向网络发送请求参数.
String requestUrl ="http://localhost:8080/itcast/contanctmanage.do";
Map<String, String> requestParams =new HashMap<String, String>();
requestParams.put("age","12");
requestParams.put("name","中国");
StringBuilder params =new StringBuilder();
for(Map.Entry<String, String> entry : requestParams.entrySet()){
params.append(entry.getKey());
params.append("=");
params.append(URLEncoder.encode(entry.getValue(),"UTF-8"));
params.append("&");
}
if (params.length() > 0)
params.deleteCharAt(params.length() - 1);
byte[] data = params.toString().getBytes();
URL realUrl = new URL(requestUrl);
HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
conn.setDoOutput(true);//发送POST请求必须设置允许输出
conn.setUseCaches(false);//不使用Cache
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
DataOutputStream outStream =new DataOutputStream(conn.getOutputStream());
outStream.write(data);
outStream.flush();
if( conn.getResponseCode() == 200 ){//如果返回码是200,就得到服务器返回的数据
String result = readAsString(conn.getInputStream(), "UTF-8");//这个方法为自定义的流的读取方法
outStream.close();
System.out.println(result);
}
2,向Internet发送xml数据
利用HttpURLConnection对象,我们可以向网络发送xml数据.
StringBuilder xml = new StringBuilder();
xml.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
xml.append("<M1V=10000>");
xml.append("<UI=1 D=\"N73\">中国</U>");
xml.append("</M1>");
byte[] xmlbyte = xml.toString().getBytes("UTF-8");
URL url = new URL("http://localhost:8080/itcast/contanctmanage.do?method=readxml");
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);
conn.setDoOutput(true);//允许输出
conn.setUseCaches(false);//不使用Cache
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
DataOutputStream outStream =new DataOutputStream(conn.getOutputStream());
outStream.write(xmlbyte);//发送xml数据
outStream.flush();
if (conn.getResponseCode() != 200)
throw new RuntimeException("请求url失败");
InputStreamis = conn.getInputStream();//获取返回数据
String result = readAsString(is, "UTF-8");//自定义读取流的方法
outStream.close();