0

我想在 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 行已经明确设置它。

上面的代码片段适用于其他不需要参数的简单网页。

您的建议将不胜感激。

谢谢,

杰克

4

3 回答 3

0

BalusCjava.net.URLConnection在以下链接中很好地描述了使用

使用 java.net.URLConnection 触发和处理 HTTP 请求

于 2012-08-31T08:21:24.637 回答
0

几件事:

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 编码替换空格。在这里查看如何做到这一点。

于 2012-08-31T08:21:34.670 回答
0

我检查了 domin.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());
}
于 2014-07-29T00:03:59.073 回答