httpclient4.3获取网页信息

探索者v
领域专家: 数据科学与机器学习技术领域
2014-01-19 11:05:54
想用 httpclient 提交表单获取网页的信息,可是现在遇到很多问题。

比如这个网站 http://bidd.nus.edu.sg/group/ttd/ttd.asp
提交信息之后的网页为 http://bidd.nus.edu.sg/group/TTD/ZFTTDWholeSearch_disease.asp?SetQuery=Y
这里的Y不清楚是什么,算post还是get方法,应该用httpclient的哪一个函数?还有就是表单中输入了数值,怎样在第一个页面提交信息,获取第二个网页的信息?拜求,请诸位前辈解答。
...全文
1244 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
当然是get了。
tony4geek 2014-01-20
  • 打赏
  • 举报
回复
或者 htmlparser 都可以
String path = "http://bidd.nus.edu.sg/group/TTD/ZFTTDWholeSearch_disease.asp?SetQuery=Y"; Parser parser = new Parser(path); parser.setEncoding("gbk"); CharSequence list = parser.parse(null).toHtml(); System.out.println(list);
tony4geek 2014-01-20
  • 打赏
  • 举报
回复
用 jsoup 抓取http://bidd.nus.edu.sg/group/TTD/ZFTTDWholeSearch_disease.asp?SetQuery=Y
探索者v 2014-01-20
  • 打赏
  • 举报
回复
引用 1 楼 hhzxj2008 的回复:
用chrome的开发者工具(F12)试试,提交后http://bidd.nus.edu.sg/group/ttd/ttd.asp,查看使用的GET还是POST。
首先感谢您的帮助。 ttd.asp的网页是get方法,disease.asp?SetQuery=Y是post方法,我认为操作第一个网页的时候就用post传值,可是不知道怎么传传什么,我在网上搜到的下面的代码换成自己的网址,传值我传的是input文本框的name=自定义的值,但是返回的只是当前页面的html代码,不是第二个网页的。请给予指导,再次表示感谢。
package com.mobilenet;

import java.io.BufferedReader;   
import java.io.IOException;   
import java.io.InputStream;   
import java.io.InputStreamReader;   
import java.io.OutputStreamWriter;   
import java.net.URL;   
import java.net.URLConnection;   
  
public class TestPost {   
  
    public static void testPost() throws IOException {   
  
    	//连接地址
    	String surl = "http://219.238.180.***:80/.../loginservlet?command=login";
    	
        /**  
         * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using  
         *  java.net.URL and //java.net.URLConnection  
         */  
        URL url = new URL(surl); 
        URLConnection connection = url.openConnection(); 
        
        /**  
         * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。  
         * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:  
         */  
        connection.setDoOutput(true);   
        /**  
         * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...  
         */  
        OutputStreamWriter out = new OutputStreamWriter(connection   
                .getOutputStream(), "UTF-8");   
        out.write("user_account=admin&user_password=******"); //post的关键所在!   //传值我传的是input文本框的name=自定义的值
        // remember to clean up   
        out.flush();   
        out.close();   
        /**  
         * 这样就可以发送一个看起来象这样的POST:   
         * POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT:  
         * text/plain Content-type: application/x-www-form-urlencoded  
         * Content-length: 99 username=bob password=someword  
         */  
        // 一旦发送成功,用以下方法就可以得到服务器的回应:   
        String sCurrentLine;   
        String sTotalString;   
        sCurrentLine = "";   
        sTotalString = "";   
        InputStream l_urlStream;   
        l_urlStream = connection.getInputStream();   
        // 传说中的三层包装阿!   
        BufferedReader l_reader = new BufferedReader(new InputStreamReader(   
                l_urlStream));   
        while ((sCurrentLine = l_reader.readLine()) != null) {   
            sTotalString += sCurrentLine + "\r\n";   
  
        }   
        System.out.println(sTotalString);   
    }   
  
    public static void main(String[] args) throws IOException {   
  
        testPost();   
  
    }   
  
}  

探索者v 2014-01-20
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
当然是get了。
这是网页里提交表单的代码,如果直接把查询的内容写到地址栏中,应该怎么写? <form action="../TTD/ZFTTDWholeSearch_disease.asp?SetQuery=Y" method="post" name="FORM">
探索者v 2014-01-20
  • 打赏
  • 举报
回复
引用 4 楼 rui888 的回复:
或者 htmlparser 都可以
String path = "http://bidd.nus.edu.sg/group/TTD/ZFTTDWholeSearch_disease.asp?SetQuery=Y"; Parser parser = new Parser(path); parser.setEncoding("gbk"); CharSequence list = parser.parse(null).toHtml(); System.out.println(list);
谢谢您的答案,我的问题不是抓取页面,而是如何从第一个网页输入数值,得到第二个页面,这一步做不到SetQuery=Y,Y不知道是什么
元心 2014-01-19
  • 打赏
  • 举报
回复
用chrome的开发者工具(F12)试试,提交后http://bidd.nus.edu.sg/group/ttd/ttd.asp,查看使用的GET还是POST。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧