本文主要解决以下几个问题: 一、如何使用post方法及post的内容 二、如何解决http包的乱码 三、网络编程的主要过程下面一一介绍。
一、如何使用post方法及post的内容 post是客户端向服务器发送的行为,这是很多人多明白的。但是,post传递的内容及格式和如何使用post编程,这一点很多人则不是很清楚。我也是搜集了大量的网络上的资源才明白的,所以要感谢网上那些无私奉献的“大牛”。 post主要传递的是NameValuePair,就是说是若干对Name和Value。当然格式也是非常重要的。比如form表单传递(post),传递用户名user,传递密码password。user对应的值假设为admin,password对应的值是admin,那么post的内容就是——user=admin&password=admin注意,Name和value之间有一个“=”,而两个Name和Value对之间有“&”,这个在写程序时要注意
二、如何解决http包乱码其实中文乱码问题大家并不陌生,而且对此也是“深恶痛绝”。我也没有一个完全的解决办法,可以用之四海皆准。不过,在网络编程中,我提出一种方式,保证可以通过。(痛苦了一天去测试各种方法,有些网上的代码根本就不能用,稍稍吐槽一下,但是不影响我对网络共享资源的推崇以及对那些无私的人的尊敬) 如下: 1.对于中文Value(或Name,我没测试Name,因为两个是一样的),可以使用如下的方式URLEncoder.encode(values, "UTF-8"),之后组装好post出去。 2.通过URL连接收到服务端返回的inputstream时,可以做类似如下转换:in = new Scanner(conn.getInputStream(),"UTF-8");这样就可以保证post出去的是UTF-8,接收到的也是UTF-8。
三、网络编程的主要过程 第一步,建立连接URL url;url = new URL(strURL);URLConnection conn = url.openConnection(); 第二步,设置connconn.setDoInput(true);conn.setDoOutput(true);这个是必须的,至于为什么我目前也没有搞清楚。大家可以在评论中讨论,我将来弄清楚时会给出答案 第三步,建立输出流并准备输出内容 A、PrintWriter out = new PrintWriter(conn.getOutputStream()); B、boolean first = true;//下面是实现post内容的一个方式 for(int i=0; i<7; i++) { if(first) { first = false; } else{ out.print("&"); } out.print(names); out.print("="); out.print(URLEncoder.encode(values, "UTF-8"));//这里处理中文乱码 } out.close(); 第四步,准备接收 Scanner in;in = new Scanner(conn.getInputStream(),"UTF-8");//这里处理中文乱码 第五步,处理输入流内容 StringBuilder response = new StringBuilder(); while(in.hasNextLine()) { response.append(in.nextLine()); response.append("\n");} String temp = response.toString();System.out.println(temp); 这里使用StringBuilder类,其实是优化StringBuffer,也可以使用StringBuffer。 后记 通过这三部分介绍,可以很轻松的搭建一个模拟form表单提交的过程,而且将中文乱码问题很好处理。这也可以作为爬虫程序的一个参考。
|