package com.siwuxie095.post;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class TestPost {
/**
* 先创建一个URL,打开连接,
* 将 URLConnection 转换成 HttpURLConnection
* 设置连接的所有参数:字符集、可以输入输出、请求方法
* 接着获取输出流,将向服务器传输的数据一次性写出
* 写出之后再获取输入流,再从输入流中读取数据
*
* @param args
*/
public static
void main(String[] args) {
//调用线程:ReadByPost 使用匿名对象
new ReadByPost().start();
}
}
//创建一个线程:ReadByPost
class ReadByPost extends Thread{
//复写 run()方法
@Override
public
void run() {
try {
//创建一个URL对象,属于 java.net 包中的
//传入一个网络连接的地址
//使用Post方法来读取Http数据,传入的URL地址和Get方法不同
//
//(1)「http://fanyi.youdao.com/openapi.do」
是真实的URL,单纯的网址
//(2)而问号?后面的
「keyfrom=siwuxie095...要翻译的文本」
都是向服务器传输的数据,
// 使用网络连接的输出流进行输出
//
//整合在一起就是一个整体的URL,不过这里传入(1)
//有异常抛出,使用 try catch 捕获
URL url=new URL("http://fanyi.youdao.com/openapi.do");
//使用openConnection()方法打开链接
//返回值是URLConnection类型,因为是使用Post方法,
//需要创建一个HttpURLConnection 接收返回值
//HttpURLConnection 继承自URLConnection,需要强制类型转换
//同样是 java.net 包中的类
//有异常抛出,用 try catch 捕获
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
//为 connection 设置参数:
//(注意:将所有参数设置完毕后再做其他操作)
//设置编码为 UTF-8
connection.addRequestProperty("encoding", "UTF-8");
//使用 setDoInput() 传入 true,则当前的 connection 就能从网络获取数据
connection.setDoInput(true);
//同样将 setDoOutput()也设置为 true,就可以向服务器传输数据
connection.setDoOutput(true);
//将 connection 的访问方式设置为Post
connection.setRequestMethod("POST");
//connection建立连接之后,要先获取输出流和再获取输出流
//获取输出流,创建OutputStream接收返回值
OutputStream os=connection.getOutputStream();
//包装
OutputStreamWriter osw=new OutputStreamWriter(os);
//再包装
BufferedWriter bw=new BufferedWriter(osw);
//先对服务器进行输出(向服务器传输数据,发送请求)
//使用BufferedWriter的write()方法,这里传入(2),前面加不加
问号 ? 均可
//指定doctype的类型为 XML,翻译:welcome
bw.write("keyfrom=siwuxie095-test&key=2140200403&type=data&"
+ "doctype=xml&version=1.1&q=welcome");
//强制输出 flush
bw.flush();
//获取输入流,创建InputStream接收返回值
InputStream is=connection.getInputStream();
//包装
InputStreamReader isr=new InputStreamReader(is);
//再包装
BufferedReader br=new BufferedReader(isr);
//接着读取数据(读取从服务器返回的XML数据)
String line;
StringBuilder builder=new StringBuilder();
//如果line不为空,将其填充到builder中
while ((line=br.readLine())!=null) {
builder.append(line);
}
//读取完毕,关闭流
bw.close();
br.close();
osw.close();
isr.close();
os.close();
is.close();
//输出读取到的数据
System.out.println(builder.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|