vip*_*vip 7 java user-agent http java-web-start
我们在Java应用程序中定义了一个包含以下内容的自定义HTTP User-Agent:
我们希望将此用户代理应用于应用程序创建的所有HTTP连接,包括我们手动打开的连接,以及JRE自动创建的连接,例如,当JEditorPane解析HTML代码中引用的外部图像时.
为此,我们在应用程序启动时将"http.agent"系统属性设置为1/2/3点(让JRE自己添加Java版本):
System.setProperty("http.agent", Version.getAgentString());
Run Code Online (Sandbox Code Playgroud)
当我们从jar运行应用程序时,这很有用,但不是从Java Web Start运行.
作为解决方法,我们手动将完整的User-Agent设置为我们手动创建的连接:
public static HttpURLConnection openHttpConnection(URL httpURL) throws IOException {
HttpURLConnection connection = (HttpURLConnection) httpURL.openConnection();
connection.setRequestProperty("User-Agent", Version.getFullAgentString());
return connection;
}
Run Code Online (Sandbox Code Playgroud)
但这并不能处理JRE(JEditorPane示例)创建连接的情况.
在这种情况下,我们如何设置用户代理?
我们试图sun.net.www.protocol.http.HttpURLConnection.userAgent通过使用这个例子中的反射来改变它的值,但它不起作用,我们正面临着一个问题IllegalAccessException.
我们既不能在JNLP文件中设置User-Agent,因为无法确定客户端信息(用户语言+平台).
您只能从 JNLP 文件设置系统属性,而不能从启动的应用程序设置。有关如何执行此操作的说明,请参阅http://docs.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/syntax.html 。
不幸的是,您感兴趣的数据当时似乎不可用,因此这很可能不会满足您的需要。
您也许可以使用一些较新的代理功能来获取连接,具体取决于您的应用程序。 http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html。
一种极端的解决方案可能是在应用程序中携带您自己的 http 代理,然后告诉您的应用程序使用该代理代码,然后代理代码作为唯一知道如何退出的代理代码,以及您添加的标头字段。
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |