Java用户代理

Java用户代理,java,user-agent,Java,User Agent,我最近开始在我的网站上看到像Java/1.6.0_14(及其变体)这样的用户代理 这意味着什么。它是一个浏览器还是一个机器人还是什么?这意味着你的站点是通过某台机器上的JVM访问的。它可以是一个爬虫,也可以是一个简单的抓取数据的人。可以使用类复制用户代理字符串。以下是一个示例: import java.net.*; public class Request { public static void main(String[] args) { try {

我最近开始在我的网站上看到像Java/1.6.0_14(及其变体)这样的用户代理


这意味着什么。它是一个浏览器还是一个机器人还是什么?这意味着你的站点是通过某台机器上的JVM访问的。它可以是一个爬虫,也可以是一个简单的抓取数据的人。可以使用类复制用户代理字符串。以下是一个示例:

import java.net.*;

public class Request {

    public static void main(String[] args) {

        try {       
            URL url=new URL("http://google.ca");
            HttpURLConnection con=(HttpURLConnection)url.openConnection();
            con.connect();
            System.out.println(con.getResponseCode());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Java类将把JVM版本信息作为
用户代理
头发送。

这可能意味着有人正在使用Java抓取您的网站。除非你注意到爬虫程序占用了你大量的带宽或者不尊重你的robots.txt文件,否则这没什么好担心的。通常,合法的爬虫程序会花时间创建自定义用户代理,以便在您遇到问题时轻松联系爬虫程序,但即使他们使用默认的用户代理,也很可能是完全良性的


但是,如果您注意到Java客户端的404点击率或大量点击率出现峰值,您很可能会受到垃圾邮件发送者的攻击,这些垃圾邮件发送者在您的网站上寻找安全漏洞。如果你的网站建设得很好,他们除了烧掉你的一些带宽之外,没有什么可以做的,但是如果他们发现了一个安全漏洞,他们肯定会利用它。正确处理垃圾邮件发送者超出了本答案的范围,但焦土解决方案(至少可以作为短期修复方案)将阻止所有包含字符串“java”的用户代理。

这难道不能阻止一些android平板电脑之类的吗?我的意思是,也许java版本在UA中,但不一定是因为他们使用java的UrlConnection。当然,这是一个焦土解决方案,因为它快速有效,但会产生其他负面后果。阻止所有Java用户代理将阻止合法访问者,但可以快速阻止某些攻击。也就是说,我不认为这会影响大多数Android平台,一个快速的Google for没有显示任何字符串中包含“java”的内容——很可能是有意避免与java爬虫混淆。请注意:Google search会阻止java用户代理。“您的客户端没有获取URL/搜索的权限”-只需使用用户代理切换器插件进行尝试,并将用户代理设置为Java/1.8.045。一般来说,一个好的Java应用程序应该设置它的用户代理字符串来反映应用程序的名称/prupose,所以“Java/version”很可能不是合法用户。@Torinfinemann Google禁止任何类型的刮刀,不管用户代理如何。这可能是错误的。如果用户代理设置为“MyJavaBrowser”,它不会阻止我的浏览器,但会阻止“Java/1.8.0_45”。我的主要观点是,合法的用户代理(即爬虫或浏览器)将在用户代理字符串中正确标识自己。使用google只是为了说明“Java/”不太可能是任何合法浏览器的用户代理字符串的一部分,因为这会使浏览器用户无法使用google.com/search。这反过来又使我得出结论,阻塞例如“^(Java/\d\.\d)”将是“安全的”(尽管不完整)。