一个java的URLConnection的设置用户代理
-
22-09-2019 - |
题
我试图解析使用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”。
不隶属于 StackOverflow