HTTP URL连接响应

时间:2015-12-29 07:13:34

标签: java

我正在尝试点击URL并从我的Java代码中获取响应。

我正在使用URLConnection来获得此响应。并在html文件中编写此响应。

在执行java类后在浏览器中打开此html时,我只获得谷歌主页而不是结果。

我的代码错误,我的代码在这里,

    FileWriter fWriter = null;
    BufferedWriter writer = null;

    URL url = new URL("https://www.google.co.in/?gfe_rd=cr&ei=aS-BVpPGDOiK8Qea4aKIAw&gws_rd=ssl#q=google+post+request+from+java");
    byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes());
    String encoding = new String(encodedBytes);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    connection.setRequestProperty("User-Agent", "Mozilla/5.0");
    connection.setRequestProperty("Accept-Charset", "UTF-8");
    connection.setDoInput(true);        
    connection.setRequestProperty("Authorization", "Basic " + encoding);
    connection.connect();

    InputStream content = (InputStream) connection.getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(content));
    String line;

    try {
        fWriter = new FileWriter(new File("f:\\fileName.html"));
        writer = new BufferedWriter(fWriter);
        while ((line = in.readLine()) != null) {
            String s = line.toString();
            writer.write(s);
            }
    writer.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

相同的代码可以在几天后使用,但现在不行。

2 个答案:

答案 0 :(得分:1)

不建议使用此搜索方法失败,您必须使用google search APIs进行此类工作。

注意: Google使用了一些重定向并使用令牌,所以即使你会找到一种聪明的方法来处理它,它也应该长期失败。

修改

这是一个使用Google搜索API的示例,您可以以可靠的方式完成工作;有关详细信息,请参阅source

public static void main(String[] args) throws Exception {
    String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    String search = "stackoverflow";
    String charset = "UTF-8";

    URL url = new URL(google + URLEncoder.encode(search, charset));
    Reader reader = new InputStreamReader(url.openStream(), charset);
    GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);

    // Show title and URL of 1st result.
    System.out.println(results.getResponseData().getResults().get(0).getTitle());
    System.out.println(results.getResponseData().getResults().get(0).getUrl());
}

答案 1 :(得分:1)

原因是此网址不会自行返回搜索结果。您必须了解Google的工作流程才能理解它。在浏览器中打开此URL并查看其来源。你只会在那里看到很多javascript。

实际上,在简短摘要中,Google使用Ajax请求来处理搜索查询。

要执行所需的任务,您必须使用无头浏览器(困难的方式),它可以执行javascript / ajax或更好地使用google search api指示的anand