GAE-Google App Engine网址抓取(java.net.UrlConnection)

Google App Engine 的网址抓取挺方便的,可以使用java.net.UrlConnection这个类。有了这个我们可以干什么?例如可以从某处获取天气信息等等~

(提醒一下,上面的是图片。。不要误点了啊。。。)
看看例子:http://2.latest.fatkuns.appspot.com/

GAE网址抓取是什么?

App Engine 应用程序可以抓取资源,并通过互联网使用 HTTP 和 HTTPS 请求与其他主机通信。应用程序使用网址抓取服务来进行请求。 我觉得其实就是可以通过它抓取别人网页的源代码。

使用URL获取源码

package com.fatkun;
/**
 * 在GAE上抓取网址
 * @author Fatkun
 * @site http://fatkun.com
 */

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

import javax.servlet.http.*;

@SuppressWarnings("serial")
public class URL2Servlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		resp.setContentType("text/plain; charset=utf-8");//显示编码

		URL url = new URL("http://fatkun.com");
		// 读取源码
		//读取中文时,使用Reader类是每次读出两个字节的,不会出现中文乱码
		InputStreamReader in = new InputStreamReader(url.openStream(), "UTF-8");
		char[] buf = new char[2048];//缓存
		StringBuffer sb = new StringBuffer();
		int len = 0;
		while ((len = in.read(buf)) != -1) {//当没到文档尽头继续读取
			sb.append(buf, 0, len);
		}

		// 输出在网页上
		resp.getWriter().println(sb.toString());
	}
}

使用HttpURLConnection 来POST内容

// 此处的地址请换成你的,在本地测试时可以填入http://localhost:8888/request.jsp
URL url = new URL("http://2.latest.fatkuns.appspot.com/request.jsp");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);// 使用 URL 连接进行输出
connection.setRequestMethod("POST");
// 取得输出流
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
// 用UTF-8编码,保证中文传递正常
String message = URLEncoder.encode("你好,I'm Fatkun!", "UTF-8");
// 写入发送的内容
writer.write("msg=" + message);
writer.close();

上面是主要的代码,看注释好了,都很清楚。

Google App Engine中文乱码问题

注意在读取中文的网页时,由于编码是使用UTF或者GBK,GB2312等编码,使用InputStream类不太方便,另外有可以出现错误。
试过使用InputStream类,然后用new String(bytes[],”utf-8″)来转换编码,不过出现一点问题,不知道是我不会用还是怎么的。
不过使用这样的写法就方便多了。
InputStreamReader in = new InputStreamReader(url.openStream(), “UTF-8”);
编码都不用转换了~指定它的编码就行。
注意这里要加上“UTF-8”,虽然不加在本地测试时没问题,不过上传到GAE上就不能显示中文了。
PS2:这里的UTF-8是代表你抓取网页的编码。如果你抓取的网页是gb2312的需要根据实质需求改变。 附上我做的例子:http://2.latest.fatkuns.appspot.com/
源码在这里:http://2.latest.fatkuns.appspot.com/source.rar,里面的lib目录下的我删除了,请自行添加。

updatedupdated2024-11-302024-11-30