我尝试像这样为http请求设置用户代理:
public BufferedReader readURL(String url){
URL urlcon;
BufferedReader in = null;
try {
urlcon = new URL(url);
connection = (HttpURLConnection)urlcon.openConnection();
System.setProperty("http.agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
System.out.println(connection.getHeaderField("User-Agent"));
connection.connect();
in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String header = connection.getHeaderField(0);
System.out.println(header);
System.out.println("---Start of headers---");
int i = 1;
while ((header = connection.getHeaderField(i)) != null) {
String key = connection.getHeaderFieldKey(i);
System.out.println(((key==null) ? "" : key + ": ") + header);
i++;
}
System.out.println(connection.getHeaderField("http.agent"));
System.out.println("---End of headers---");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
}
我得到的是User-Agent null:
null
HTTP / 1.0 200 OK
---标题的开头---
服务器:Apache
缓存控制:max-age = 10
到期日:2011年8月7日星期日格林威治标准时间16:09:26
变化:接受编码
内容类型:text / html
内容长度:163582
日期:太阳,2011年8月7日16:09:20 GMT
X-Varnish:889692780 889684459
年龄:4
连接:保持活力
X-Bip:889692780 70 148
通过:1.1 CachOS
null
---标题结束---
为什么我不能设置User-Agent?
答案 0 :(得分:3)
使用setHeader(),而不是setRequestProperty。
答案 1 :(得分:1)
设置系统属性:“http.agent”将更改您的连接标头:“User-Agent”,但请注意您的java版本仍在其中according to documentation:
其他HTTP属性
http.agent(默认:“Java /”) 定义http请求中User-Agent请求标头中发送的字符串。
请注意,字符串“Java /”将附加到属性中提供的字符串(例如,如果使用-Dhttp.agent =“foobar”,则User-Agent标头将包含“foobar Java / 1.5.0”如果VM的版本是1.5.0)。此属性仅在启动时检查一次。
请注意,在启动时只检查一次属性,因此您可能需要首先设置属性,而不是创建第一个URL并进行连接。
要验证是否已发送相应的标头,您可以使用“tcpdump”。用法:
tcpdump -n dst host stackoverflow.com -vvvv
答案 2 :(得分:0)
服务器返回标头信息。我猜“用户代理”并不重要,无法返回。仅仅因为它没有被退回并不意味着它没有被发送。
我有一个显示标题信息的小工具(ieHTTPHeader)。当我在此页面上刷新时,它会发送并返回第一组标题:
GET / questions / 6973981 / why-cant-i-set-java-http-user-agent HTTP / 1.1
接受: /
推荐人:https://stackoverflow.com/questions/tagged/java?page=2&sort=newest&pagesize=15
接受语言:en-ca
用户代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 5.1; Trident / 4.0)
Accept-Encoding:gzip,deflate
主持人:stackoverflow.com
连接:保持活力
Cookie:__ utmc = 140029553; __utma = 140029553.1370458634.1310761265.1312727448.1312739618.123; __utmz = 140029553.1312739618.123.123.utmcsr =谷歌| utmccn =(有机)| utmcmd =有机| utmctr =雅虎%20finance%20api%20java; __qca = P0-1025379872-1310761265343; M = 4; USR = T = cEyCYO7bXECF&安培; S = X6DJTj5kuY8H; __utmb = 140029553.15.10.1312739618
HTTP / 1.1 200 OK
缓存控制:public,max-age = 60
内容类型:text / html;字符集= UTF-8
内容编码:gzip
到期日:2011年8月7日星期日18:25:43 GMT
最后修改日期:2011年8月7日星期日18:24:43 GMT
变化:*
日期:太阳,2011年8月7日18:24:42 GMT
内容长度:12040