今天早上上了第一课《网络编程》,老师就知道无聊地吹……用Opera mini看绝影的小说(疯狂程序员)到下课。
原来这学期的网络编程主要是用Java,好像还没怎么写过Java的网络连接代码,想起早天的Python版本CETQuery,决定花两个小时弄弄,权当Java Hello World。
过程遇到的问题除了那些API的使用外,主要是Java的中文编码问题了。编写本地程序时,管你中文日文希腊文,因为Java用的是Unicode编码,通通支持。但这次是从网络读取的数据,其中的中文是GB2312编码的,直接显示就乱码给你看。Java和Python都有中文编码问题,虽说殊途同归,但他们的“问题”可是各具特色的,稍后准备撰文详其解决之道。
CETQuery-Java详细代码如下:
import java.net.*; import java.io.*; public class CETQuery { public static void main(String[] args) { if ((args.length != 2) || ((args[0] == "4") || (args[1] == "6")) || (args[1].length() != 15)) { System.out.println("Error: 程序参数错误,考试类型(4、6),准考证号长度(15位)"); System.out .println("nExample:nnjava CETQuery 4 123456789012345nn"); System.out .println("CETQuery-Java version 0.1 2009.2.26nn An Exercise Program by PT, GZ Universityn Author Blog: http://blog.ptsang.net , Welcome to Drop by.nn"); System.exit(1); } String cet_url = "http://cet.99sushe.com/cetscore_99sushe0902.html?t=" + args[0] + "&id=" + args[1]; String result = new String(); try { URL url = new URL(cet_url); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.addRequestProperty("Referer", "http://cet.99sushe.com/"); // conn.setRequestMethod("POST"); System.out.println(conn.getURL()); InputStream in = conn.getInputStream(); byte[] data = new byte[1024]; while (in.read(data) > 0) { result += new String(data, "gb2312"); } in.close(); } catch (Exception e) { System.out.println(e); } // System.out.println(result); String[] array = result.split(","); String[] type = { "听力", "阅读", "综合", "写作", "总分", "学校", "姓名", "Prev 1", "Next 1", "Next 2" }; System.out.printf("n***** CET %s 成绩清单 *****n", args[0]); System.out.println("-准考证号: " + args[1]); for (int i = 0; i < array.length; i++) { System.out.printf("-%s: %sn", type[i], array[i]); } System.out.println("**************************n"); } } |
这个我喜欢,上次那个python版的不会用.
呵呵,做这个Java好像太杀鸡用牛刀了点,Python很适合搞小玩意。
原来java网络编程还可以这样用,我喜欢
可惜我试的时候,这方法已经不能用了,信息都在JavaScript中,
还要进一步解析才行。
燃点起我的斗志了