我试图解析使用Java与URLConnection的网页。我尝试建立的用户代理是这样的:

java.net.URLConnection c = url.openConnection();
c.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");

但是所得到的用户代理是一个我指定,用“的Java / 1.5.0_19”追加到末尾。有没有办法真正地设置用户代理没有这个此外?

有帮助吗?

解决方案

副手,属性设置http.agent系统""可能做的伎俩(我没有在我面前的代码)。

您也许可以侥幸逃脱:

 System.setProperty("http.agent", "");

但可能需要您和URL协议处理程序的初始化之间的比赛,如果缓存在启动时(实际上,我不认为它)的值。

该属性,也可以通过JNLP文件(从6u10中提供给小应用程序)设置并在命令行上:

-Dhttp.agent=

或者对包装器命令:

-J-Dhttp.agent=

其他提示

只是为了澄清:setRequestProperty("User-Agent", "Mozilla ...")现在工作得很好,并在年底不追加java/xx!至少与Java 30年6月1日和较新的。

我听我的机器上用netcat的(一个端口监听):

$ nc -l -p 8080

这只是侦听的端口上,这样你就看不到它获取要求,像原始HTTP报头。

和得到了下面的HTTP报头,而不调用setRequestProperty:

GET /foobar HTTP/1.1
User-Agent: Java/1.6.0_30
Host: localhost:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

和WITH调用setRequestProperty:

GET /foobar HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
Host: localhost:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

可以看到用户剂适当地设置。

完整的示例:

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;


public class TestUrlOpener {

    public static void main(String[] args) throws IOException {
        URL url = new URL("http://localhost:8080/foobar");
        URLConnection hc = url.openConnection();
        hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");

        System.out.println(hc.getContentType());
    }

}

它为我工作 的在addRequestProperty设定的用户代理。

URL url = new URL(<URL>);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");

HTTP服务器倾向于拒绝旧的浏览器和系统。

在页面技术博客(WH):最常见的反映部分中的当前的浏览器的用户代理属性的用户代理的“您的用户代理是:” 的,这可以应用到设置java.net.URLConnection的请求属性“用户代理”或系统属性 “http.agent”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top