在用HttpURLConnection 读取网络图片时候 出现 404 错误 求大神指点 ? http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg URL url = new URL("http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setDoInput(true); con.setDoOutput(true); con.setReadTimeout(30000); con.setInstanceFollowRedirects(true); con.addRequestProperty("Cache-Control", "no-cache"); con.connect(); // 在指定目录创建一个空文件并获取文件对象 File file = new File("H:\a.jpg"); if (file.exists()) { file.delete(); }else{ file.createNewFile();} // 获取一个写入文件流对象 String location = con.getHeaderField("Location"); System.out.println(location); //这里打印 null System.out.println(con.getURL().toString()); //这里打印http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg InputStream in = con.getInputStream(); //这句出异常 |
|
5分 |
你看看直接访问域名有没有变,应该以能看到图片的地址栏地址为准。
|
直接访问 出现了一个302 的跳转
Request URL:http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg 返回: 最终浏览器显示的地址 : http://121.37.63.66/offerwow_staging/logo/1406880082963.jpg 这种302 跳转 模式 HttpURLConnection 默认就处理啊 不需要做其他的 操作 我也测试了其他的网站 给一个302的跳转链接 能正常跳转 |
|
求指点 |
|
那么你观察一下 http 通信的过程中重定向跳转时有没有什么 Referer 之类的东西 (引用页),有些网站在你直接 GET 时没带引用页时会拒绝服务,因此它知道你是在盗链。
找一个 Eclipse 中的 TCP/IP Monitor 视图配置一个 forwarder 来观察 Http 过程。 |
|
跳转时候 没有 Referer 但是浏览器 却能正常显示 |
|
要跳转你要用一下头信息,调用responsecode 再看前后url变化就可以了。 con.setRequestProperty("User-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1"); con.setRequestProperty("accept-language", "zh-CN"); System.out.println(con.getURL().toString()); //这里打印http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg int code=con.getResponseCode(); System.out.println(con.getURL().toString()); //这里打印http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg |
|
你这里都没跳转啊 在浏览器 会出现一个 302 的跳转 返回: 为什么在代码里面跳转不过去呢 |
|
15分 |
URL url = new URL("http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("User-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1"); con.setRequestProperty("accept-language", "zh-CN"); con.setInstanceFollowRedirects(true); con.addRequestProperty("Cache-Control", "no-cache"); con.connect(); System.out.println(con.getURL().toString()); //这里打印http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg int code=con.getResponseCode(); System.out.println(con.getURL().toString()); //这里打印http://www.offerwow.cn/image/offerwow_staging/logo/1406880082963.jpg 自己看下打印的url还不明白吗?302必须设置User-agent和accept-language,跳转是浏览器帮你的。 |
哦 明白了 谢谢大神 没想到 还有这么个规则 …….. 但是我 测试其他 url 不加 这两个User-agent和accept-language 一样可以正常跳转哦 。。。 这个是为什么啊 |
|
我试了一下事实说明 跟你这个 设置User-agent和accept-language 没有什么关系 是服务器 拦截到了 我的url 没有跳转 |
|
但是我还是谢谢你们
|