【发布时间】:2012-08-15 23:07:38
【问题描述】:
我想在网页上获取一些数据,所以我使用 java 向服务器发送 http 请求
我尝试过 URLConnection 和 Jsoup,但它们都无法得到正确的响应
如果在浏览器浏览网址
http://www.hkprinters.org/en/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 实现相同的会话,有什么例子吗?
【问题讨论】:
-
你期望得到什么样的回应,你实际得到什么样的回应?
-
尝试使用
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2")之类的内容正确设置请求标头。 asp 页面可能在用户代理字符串或 cookie 上。 -
是空白响应还是抛出异常?
-
我测试了setrequestproperty,结果一样,我认为这不是用户代理,因为我有新发现,我将编辑我的问题帖子
标签: java sockets httpresponse urlconnection