因为一直想写一个刷人气的工具,其中最基本的就是post方法了,然后再收集页面中的元素。今天我就开始着手写Java的POST方法。
在Java.net.*;中用URL构造地址,然后用流写入,似乎应该是很简单的方案,我却一直没成功。我百度Google了很久,参考了很多别人代码,似乎很容易实 现,可是我的一直问题,而我觉得和网上提供的一样。我的代码如下
package netStudy01;
import java.io.*;
import java.net.*;
public class PostBaidu
{
public static void main(String[] args)
{
try
{
URL url = new URL("[ http://localhost/xhpx_web/gradequery.asp](http://localhost/xhpx_web/gradequery .asp)");
try
{
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
HttpURLConnection.setFollowRedirects(false);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod(“POST”);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty(“User-Agent”,
&n bsp_place_holder; “Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)”);
conn.setRequestProperty(“Content-Type”,
&n bsp_place_holder; “application/x-www-form-urlencoded”);
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(),“ASCII”);
String request = “exam_id=123&submit=%CC%E1%BD%BB”;
out.write(request);
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuffer content = new StringBuffer();
while ((line = in.readLine()) != null)
{
&n bsp_place_holder; content.append(line + “n”);
}
System.out.print(content);
} catch (IOException e)
{
e.printStackTrace();
}
} catch (MalformedURLException e)
{
e.printStackTrace();
}
}
}
很不幸,返回的数据一直还是这个提交页面,我尝试了好多方法,甚至用ethereal截取POST信息,用IE的POST信息和JVM的POST信息一一对比并增加信 息,包括"User-Agent",“Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)““Content- Type”, “application/x-www-form-urlencoded"都没有什么效果。
如果POST百度,甚至直接都运行时错误,我Java学的太少,完全不知道错误缘由。再加上本来java.net功能就很弱,我想使用Apache.commons .html-client.*的包来完成,这样也能捕获到网页元素。
Goolge了一会才从Apache的项目列表中找到[http://hc.apache.org/downloads.cgi](http://hc.apache .org/downloads.cgi)这个组件,呵呵,居然是校内网提供的镜像站点,看来校内的架构也用到了Apache的开源阿。
1.7M下完,配好ClassPath和项目jar,打开java文档,也就是API说明吧,铺天盖地的英文有点怕…呵呵,慢慢看吧,压缩包内还有几个小例子,可 以供参考。
网上详细的资料不多了,得研读好一会,继续学习,Lingoes开着,英语果然很重要阿````
想起以前在.NET平台下面做,轻松容易很多,不用自己辛苦的找组件,MS的实力摆在哪里,全都提供好了。
原文链接: Java中的POST引发的... | Log4D
3a1ff193cee606bd1e2ea554a16353ee
欢迎关注我的微信公众号:窥豹