后台抓取网页图片(图片由SERVLET生成,没有URL)

[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