下载Servlet生成的图片

原创
2013/09/09 11:56
阅读数 977

想抓取某些网站通过servlet生成的图片,简单的就是通过HttpClient来实现:

String url = "http://xxxx/pictureservlet?size=100";
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);

HttpResponse response = httpclient.execute(httpGet);
 
try {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
if (entity.isStreaming()) {
String destinationFile = "d://tmp//image.jpg";
OutputStream os = new FileOutputStream(destinationFile);
entity.writeTo(os);
}
} finally {
httpGet.releaseConnection();
}
当然上面的代码也可以直接使用scala来写,更方便。另外使用Htmlunit也许更简单,这个是模仿浏览器的行为。

如果使用sbt增加

"org.seleniumhq.selenium" % "selenium-java" % "2.35.0" 就可以使用了。

val webClient = new WebClient
  val page: UnexpectedPage = webClient.getPage("http://xxx/pictureservlet?size=100")
  val input = page.getWebResponse().getContentAsStream()
  val destinationFile = "d://tmp//image.jpg"
  val os = new FileOutputStream(destinationFile)
  os.write(IOUtils.toByteArray(input))
  os.close()
  input.close()
为什么下载图片要单独写这文章,因为之前下载的图片的网站必须要求从首页进入,可能增加了session或相关的标识来记录下载图片是不是从首页来进入,如果模仿cookie或session比较麻烦的时候,这时使用selenium来模拟浏览器操作也许是最方便的。

上面的HttpClient对这种情况也是可行的,直接发送一次首页请求,这个连接是共享的,那么进行下载图片是就认为是有效的请求了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部