查询网页时Java传递URLConnection参数
Posted
技术标签:
【中文标题】查询网页时Java传递URLConnection参数【英文标题】:Java Passing URLConnection Parameter when query webpage 【发布时间】:2012-08-31 07:58:09 【问题描述】:我想在 www.domain.com.au 上进行搜索,其中需要提供一些 URL 参数才能获得 成功的 HTTP 响应。然而,
1. String url = "http://www.domain.com.au/"; // or www.realestate.com.au
2. String charset = "UTF-8";
3. String param1 = "Melbourne 3000 VIC"; // simple search on the web page
4.
5. URLConnection connection = (URLConnection) new URL(url + "?" + param1).openConnection();
6. connection.setRequestProperty("Accept-Charset", charset);
7. connection.connect();
8. connection.setDoInput(true);
9. connection.setDoOutput(false);
10. connection.connect();
.......
响应是 HTTP 400 错误。因此,我需要您就以下问题提出建议,以了解问题出在哪里 来自:
( i ) 参数名称应该是 param1,还是网页上的其他名称?如果有,是什么?
( ii ) 假设参数名称为 param1,第 5 行是否正确?是否有必要包括 URLEncoder.encode(param1, charset) 即使第 6 行已经明确设置。
上面的代码sn-p适用于其他不需要参数的简单网页。
非常感谢您的建议。
谢谢,
杰克
【问题讨论】:
【参考方案1】:BalusC在以下链接中很好地描述了使用java.net.URLConnection
Using java.net.URLConnection to fire and handle HTTP requests
【讨论】:
感谢 BalusC 在此线程上提供您的建议。我已经阅读了这篇文章很多次,并在这个线程中使用了其中的示例,但它对我不起作用,很可能是由于我对本文所指的内容缺乏知识和解释。如果您可以查找同一个网站以了解包含参数的正确 URL,那就太好了。谢谢,杰克【参考方案2】:几件事:
1 .您没有传递名称值对。一个典型的 GET URL 请求看起来像
http://www.domain.com.au/?param1=value
你只是在传递价值,你的 URL 看起来像
http://www.domain.com.au/?Melbourne 3000 VIC
2 。更改行号5到
URLConnection connection = (URLConnection) new URL(url + "?parame1=" + param1).openConnection();
另外对查询字符串进行编码以用 html 编码替换空格。 Check here 怎么做。
【讨论】:
感谢您的更新。但是,建议 1. 甚至无法连接到 www.domain.com.au 并最终在 Google 搜索提示进行澄清。另一方面,正确的 URsL 应该类似于以下返回有效结果的内容: 感谢您的更新。但是,建议 1. 甚至无法连接到 www.domain.com.au 并最终在 Google 搜索提示进行澄清。另一方面,正确的 URsL 应该类似于返回有效结果的以下内容:domain.com.au/Search/buy/State/VIC/Area/Inner-City/Region/… 您是否能够查找此网页以阐明我应该使用哪个有效的 URL,包括参数?再次感谢,杰克【参考方案3】:我查看了 doamin.com.au 网站。
1) 搜索参数名称为“searchterm”,漏掉了URL中的key(key=value)。
HttpURLConnection connection = (HttpURLConnection) new URL(url + "?searchterm=" + param1).openConnection();
2) 如果有特殊字符,则应包含编码。
以下是将从网站返回内容的代码示例:
public void searchDomain(String key) throws Throwable
String url = "http://www.domain.com.au/"; // or www.realestate.com.au
String charset = "UTF-8";
String param1 = "Melbourne"; // simple search on the web page
HttpURLConnection connection = (HttpURLConnection) new URL(url + "?searchterm=" + param1).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream()));
java.lang.StringBuffer sb = new java.lang.StringBuffer();
java.lang.String str = br.readLine();
while (str != null)
sb.append(str);
str = br.readLine();
br.close();
connection.disconnect();
System.out.println(sb.toString());
【讨论】:
以上是关于查询网页时Java传递URLConnection参数的主要内容,如果未能解决你的问题,请参考以下文章