在Java中使用URLConnection解析网页时,正确设置用户代理至关重要。但是,默认情况下,指定的用户代理会附加“Java/1.5.0_19”。当尝试隐藏或模拟特定浏览器时,这可能是一个问题。
澄清和解决
在 Java 版本 1.6.30 及更高版本中,用户代理的问题追加不再存在,并且 setRequestProperty("User-Agent", "Mozilla ...") 按预期工作。为了验证这一点,可以设置端口侦听器来捕获 HTTP 标头。
在未使用 setRequestProperty 的情况下发送请求时,HTTP 标头将包括:
User-Agent: Java/1.6.0_30
但是,当setRequestProperty 用于设置特定的用户代理,HTTP 标头将反映指定的value:
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
示例代码
以下代码提供了如何设置用户代理和检索网页内容类型的完整示例:
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()); } }
以上是如何设置Java URLConnection的用户代理?的详细内容。更多信息请关注PHP中文网其他相关文章!