查询网页时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参数的主要内容,如果未能解决你的问题,请参考以下文章

mapping的传参方式

如何使用JAVA语言抓取某个网页中的邮箱地址

java有参方法对象做参数

Java怎么根据三个入参查询数据

Java中的参数传递

Java代码重构时,为什么禁止在方法内对对象类型的入参赋值