Fork me on GitHub

使用Post进行Http通信

--------------siwuxie095

   

   

   

   

   

   

   

有道翻译官网:http://fanyi.youdao.com/

   

找到官网页面下方的 有道翻译API,选择 调用数据接口,申请一个 key

   

(申请内容可随意填写)

   

   

   

   

   

申请成功:

   

   

   

   

   

自动生成一个对应的数据接口:http://fanyi.youdao.com/openapi.do?keyfrom=siwuxie095-test&key=2140200403&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本

   

需要指定 <doctype>要翻译的文本

   

   

   

   

   

关于 API 的说明:

   

   

   

   

   

   

   

工程名:TestHttpPost

包名:com.siwuxie095.http

类名:TestPost.java

   

   

   

工程结构目录如下:

   

   

   

   

代码:

   

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

 

 

//先对服务器进行输出(向服务器传输数据,发送请求)

//使用BufferedWriterwrite()方法,这里传入(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();

}

}

 

 

}

   

   

运行一览:

   

   

   

   

将输出的 XML 数据,复制->粘贴->格式化:

   

 

   

   

   

   

   

   

【made by siwuxie095】

posted on 2017-03-31 13:58  siwuxie095  阅读(588)  评论(0编辑  收藏  举报

导航