【问题标题】:Java Passing URLConnection Parameter when query webpage查询网页时Java传递URLConnection参数
【发布时间】: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适用于其他不需要参数的简单网页。

非常感谢您的建议。

谢谢,

杰克

【问题讨论】:

    标签: java


    【解决方案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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多