Java的HTTP请求失败,(Java HTTP Request Fail)

2019-10-30 07:48发布

我在一些搜索引擎做以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();
}

问题是 - 有关于代码中没有错误,但该请求stucked。 我没有收到我的控制台我们的调试上任何种类的消息。 我想任何种类的内存不足的错误,因为我对字符串进行操作,但任何人有什么去错上的任何想法?

谢谢

编辑一个:

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

CatchQuery简单的渔获txtsearch(场)的查询。

编辑二:[主题解决]

Answer 1:

两个问题:

  1. "http://google.com/search?q="+query应该是"http://google.com/search?q="+URLEncoder.encode(query)查询网址需要打开一个连接之前进行编码,让不支持的字符转换为URL友好字符

  2. 谷歌不接受BOT连接,你应该使用谷歌的Java API来正确地执行搜索

UPDATE

谷歌不接受未经用户代理头的连接,所以你要编辑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");

它为我,测试,并告诉我,如果你的作品了。

注:从谷歌服务条款 :

自动查询

谷歌的服务条款不允许任何形式的对我们没有明确许可系统的自动查询的发送中,谷歌提前。 发送自动查询会消耗资源,包括使用任何软件(例如WebPosition金)到自动查询发送至谷歌,以确定网站或网页在各种查询谷歌搜索结果中的排名。 除了等级考核,其他类型的自动访问谷歌未经允许,也违反了我们的网站站长指南和服务条款。



文章来源: Java HTTP Request Fail