[size=large]各位牛牛:我这个问题比较棘手
我想抓取某个网站的图片是 由servlet生成的
因此无法获取图片URL
直接在地址栏输入 http"//xxxx/servlet?index=0 在网页能显示图片
但如果关闭网页,再输入http"//xxxx/servlet?index=0 就不行了,估计servlet还需要另外的参数
现在问题是,我能通过后台获取到servlet 但我不知道具体的参数(应该不止index这个参数,可能是隐藏的)
因此网上大多解决方案都是 解析HTML 把IMG 地址拿出来,我解析出来是个servlet?index=0
然后 我用这段代码
String imgurl = "http://xxx:8080/xxx/servlet?index=0"
URL url = new URL(imgurl);
去获取流,失败了。 所以有没有别的办法呢? 即使不知道servlet要求的参数,我也能抓出图片呢?
苦恼啊 [/size]
[b]问题补充:[/b]
ywbanm 您说的 badboy
我在badboy 输入http://xxx:8080/xxx/servlet?index=0" 后如果错误会提示缺哪个参数?
我想楼主的问题是不是没有伪装成一个浏览器去请求呢··我曾经做过一个抓取器去抓取网页上的信息,或许你这个是因为对方已经探测出你不是一个浏览器了,因为浏览器要访问的时候都会发一个http头请求信息的,可是你这样去拿是没有的,他当然会不给你下载下来啦··原来我去下载新浪的网站也是一样的,刚开始我一个文件都下载不下来,老是报错,后来我才知道是新浪判断到了我不是浏览器,所以我准下载,你可以试用一下apache的httpClient试一下看看··
找个软件 比如badboy之类的 看看到底要啥参数
badboy有一个自带的browser
用它访问网站,它会记录下全部的动作和交互数据
[code="java"]
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
public class DynamicGetURLImage {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String imgurl = "http"//xxxx/servlet?index=0";
URL url = new URL(imgurl);
BufferedInputStream in = new BufferedInputStream(url.openStream());
File img = new File("img.jpg");
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(img));
byte[] buf = new byte[2048];
while(in.read(buf) != -1)
{
out.write(buf);
}
in.close();
out.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
}
}
}
[/code]
可以用firebug直接调试一下就可以看到该post/get请求所需要的参数了~
是啊,先用抓包工具看看呀 :D