Java 谷歌服务器如何区分浏览器和HtmlUnit?
如果我请求以下URLJava 谷歌服务器如何区分浏览器和HtmlUnit?,java,captcha,htmlunit,impersonation,Java,Captcha,Htmlunit,Impersonation,如果我请求以下URL http://www.google.com/recaptcha/api/noscript?k=MYPUBLICKEY 我将得到旧的无脚本版本的验证码,包含谷歌街道号码的图像,如下所示 但是如果我对HtmlUnit做同样的操作,我会得到一些伪造的图像,如下所示: 它总是发生:浏览器中的真实街道号码和HtmlUnit中的黑色扭曲文本。公钥是相同的 谷歌服务器如何区分浏览器和HtmlUnit HtmlUnit代码如下所示: final WebClient webClient
http://www.google.com/recaptcha/api/noscript?k=MYPUBLICKEY
我将得到旧的无脚本版本的验证码,包含谷歌街道号码的图像,如下所示
但是如果我对HtmlUnit做同样的操作,我会得到一些伪造的图像,如下所示:
它总是发生:浏览器中的真实街道号码和HtmlUnit
中的黑色扭曲文本。公钥是相同的
谷歌服务器如何区分浏览器和HtmlUnit
HtmlUnit代码如下所示:
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
final HtmlPage page = webClient.getPage("http://www.google.com/recaptcha/api/noscript?k=" + getPublicKey());
HtmlImage image = page.<HtmlImage>getFirstByXPath("//img");
ImageReader imageReader = image.getImageReader();
final-WebClient-WebClient=新的WebClient(BrowserVersion.FIREFOX_17);
最终HtmlPage=webClient.getPage(“http://www.google.com/recaptcha/api/noscript?k=“+getPublicKey());
HtmlImage=page.getFirstByXPath(“//img”);
ImageReader=image.getImageReader();
通过Fiddler可以观察到该过程。为您的请求设置正确的标题如何<代码>用户代理
是此处的一个键
标题是后端获取客户端信息(Firefox、Chrome等)的方式,在您的案例中是什么?设置正确的标题,例如Firefox:
conn.setRequestProperty("User-Agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
如果从我使用Apache HttpClient的代码中删除,您需要根据自己的需要对其进行调整。我知道这是一篇老文章,但最好的方法是使用
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER);
如何解决问题?最有可能是用户代理http头。