0

我正在一些搜索引擎上使用 http 进行一个 java 查询,这是两个类的代码:

public EventSearch(){

    btsearch.addActionListener(this);

}

    public void actionPerformed(ActionEvent e){

        if(e.getSource()==btsearch){


            try {
                HttpRequest http = new HttpRequest(CatchQuery());
            } catch (IOException e1) {
                JOptionPane.showMessageDialog(null, "HTTP request failure.");
            }   
            this.dispose();
        }

    }

    public String CatchQuery(){
        query=txtsearch.getText();
        return query;
    }

public class HttpRequest extends EventSearch 
{
    String query;
    URL url;

public HttpRequest(String query) throws IOException{
    // Fixed search URL; drop openConnection() at the end

    try {
        url = new URL("http://google.com/search?q="+query);
        System.out.println(CatchQuery());
    } catch (MalformedURLException e) {
        JOptionPane.showMessageDialog(null, "Unable to search the requested URL");
    }


    // Setup connection properties (this doesn't open the connection)
    URLConnection connection = url.openConnection();
    connection.setRequestProperty("Accept-Charset", "UTF-8");

    // Setup a reader
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    // Read line by line
    String line = null;
    while ((line = reader.readLine()) != null) {
         System.out.println (line);
    }

    // Close connection
    reader.close();
}

问题是 - 关于代码没有错误,但请求被卡住了。我在我的调试控制台上没有收到任何类型的消息。我正在考虑任何类型的内存错误,因为我正在使用字符串,但任何人都知道出了什么问题?

谢谢你

编辑一:

public String CatchQuery(){
            query=txtsearch.getText();
            return query;
        }

CatchQuery 简单捕获txtsearch(字段)的查询。

编辑二:[主题已解决]

4

1 回答 1

2

两个问题:

  1. "http://google.com/search?q="+query应该是"http://google.com/search?q="+URLEncoder.encode(query),在打开连接之前需要对查询url进行编码,以便将不支持的字符转换为对url友好的字符

  2. Google 不接受机器人连接,您应该使用Google Java API正确执行搜索

更新

Google 不接受没有 User Agent 标头的连接,因此您必须HttpRequest在创建连接后编辑类以设置用户代理:

// Setup connection properties (this doesn't open the connection)
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)");
connection.setRequestProperty("Accept-Charset", "UTF-8");

它适用于我,测试它并告诉我它是否也适用于你。

注意:来自谷歌服务条款

自动查询

未经 Google 事先明确许可,Google 的服务条款不允许向我们的系统发送任何类型的自动查询。发送自动查询会消耗资源,包括使用任何软件(例如 WebPosition Gold)向 Google 发送自动查询,以确定网站或网页在各种查询的 Google 搜索结果中的排名。除了排名检查,其他类型的未经许可自动访问 Google 也违反了我们的网站管理员指南和服务条款。

于 2013-06-23T12:25:52.463 回答