如果我请求以下网址
http://www.google.com/recaptcha/api/noscript?k=MYPUBLICKEY
我将获得旧的无脚本版验证码,其中包含Google街道号码的图片,如此
但是,如果我对HtmlUnit
做同样的事情,我会得到一些伪造的图像版本,如下所示:
它始终发生:浏览器中的真实街道号码和来自HtmlUnit
的黑色扭曲文本。公钥是一样的。
Google服务器如何区分浏览器和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();
Fiddler可以观察到过程。
答案 0 :(得分:0)
如何为您的请求设置正确的Headers
? User-Agent
是关键所在。
标题是后端可以获取客户端信息的方式(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的代码中删除,则需要根据需要调整它。
答案 1 :(得分:0)
我知道这是老帖子,但好方法是使用
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER);
你如何解决问题?