我想在网页上获取一些数据,所以我使用 java 向服务器发送 http 请求
我已经尝试过 URLConnection 和 Jsoup,但它们都无法得到正确的响应
如果在浏览器浏览 url
http://www.hkprinters.org/sc/member_search.asp?page=1&mode=view
响应正确,得到搜索结果
但是使用java,我只能得到搜索,没有结果。
为什么响应不正确以及如何获得正确的响应?
import java.io.*;
import java.util.*;
import java.net.*;
import org.json.*;
class HttpRequest
{
public static void main(String[] args) throws Exception
{
URL url = new URL("http://www.hkprinters.org/en/member_search.asp?page=1&mode=view");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("station.txt")));
String line;
while((line=rd.readLine())!=null)
{
out.write(line);
}
out.close();
}
}
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.*;
public class read_line2 {
public static void main(String args[]) {
try {
Document doc = Jsoup.connect("http://www.hkprinters.org/en/member_search.asp?page=1&mode=view").get();
Document doc = Jsoup.parse(input, null);
Elements newHeadlines = doc.select("*");
System.out.println(newHeadlines);
} catch (Exception e) {
}
}
}
更新:
我想先解释正确和错误的结果。
正确的是搜索表单+搜索结果数据(如公司名称、地址、电话),我要这些数据。
不正确的是:
<title>db</title>
<title>func</title>
<!DOCTYPE HTML PUBLIC
........
<input type="hidden" name="hdnMode" value="search"/></form>
</table>
<font size="2"><br/>
如果用浏览器查看,只能看到搜索表单,看不到结果。
新发现是:我现在可以使用浏览器得到不正确的结果。如果您关闭浏览器并再次打开,然后浏览http://www.hkprinters.org/en/member_search.asp?page=1&mode=view
那么你会得到不正确的结果,这个结果和 JAVA 的结果完全一样
<title>db</title>
<title>func</title>
<!DOCTYPE HTML PUBLIC
........
<input type="hidden" name="hdnMode" value="search"/></form>
</table>
<font size="2"><br/>
现在,如果您可以点击提交(无需输入任何内容),那么搜索结果将再次显示,现在即使您只浏览http://www.hkprinters.org/en/member_search.asp?page=1&mode=view ( get 方法),搜索结果仍然显示。
所以我猜这个页面在我第一次点击提交按钮时会将帖子数据保存到会话中,之后,每次我浏览这个页面时,它都会从会话中找到搜索键,所以即使我使用 get 方法发送页面和模式,它仍然给我搜索结果。
但我不知道如何使用 JAVA 实现相同的会话,有什么例子吗?