我正在尝试获取用户输入的给定URL,并确定该URL是指向图像还是视频.
用例示例:
当用户粘贴YouTube视频的网址时,在保存页面时会自动显示嵌入的YouTube播放器.
当用户在Flickr中发布图片的URL时,在保存时,该页面将自动显示较小版本的Flickr图像.
您可以从响应中获取URL并查看Content-type.
您可以从apache 使用HTTP Client,它可以帮助您获取URL的内容,并可以使用它来导航重定向.例如,尝试获取以下内容:
http://www.youtube.com/watch?v=d4LkTstvUL4
将返回包含视频的HTML.过了一会儿,你会发现视频在这里:
http://www.youtube.com/v/d4LkTstvUL4
但是,如果您获取该页面,您将获得重定向:
HTTP/1.0 302 Redirect Date: Fri, 23 Jan 2009 02:25:37 GMT Content-Type: text/plain Expires: Fri, 23 Jan 2009 02:25:37 GMT Cache-Control: no-cache Server: Apache X-Content-Type-Options: nosniff Set-Cookie: VISITOR_INFO1_LIVE=sQc75zc-QSU; path=/; domain=.youtube.com; expires= Set-Cookie: VISITOR_INFO1_LIVE=sQc75zc-QSU; path=/; domain=.youtube.com; expires= Location: http://www.youtube.com/swf/l.swf?swf=http%3A//s.ytimg.com/yt/swf/cps-vf L4&rel=1&eurl=&iurl=http%3A//i1.ytimg.com/vi/d4LkTstvUL4/hqdefault.jpg&sk=Z_TM3JF e_get_video_info=1&load_modules=1
因此,您需要做的是获取URL并检查它,直到您获得最终内容
本节介绍如何处理重定向.
发出HTTP HEAD请求,以便您可以检查返回的HTTP标头,而无需先下载整个文档.在Linux下使用"curl"显示非程序化案例:
$ curl --head http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png HTTP/1.1 200 OK Cache-Control: max-age=28800 Content-Length: 3428 Content-Type: image/png Last-Modified: Fri, 16 Jan 2009 09:35:30 GMT Accept-Ranges: bytes ETag: "98f590c5bd77c91:0" Server: Microsoft-IIS/7.0 Date: Fri, 23 Jan 2009 03:55:39 GMT
您可以在Content-Type中看到这是一张图片.您可以使用来自Java的Apache的HTTPClient来执行HTTP头请求.
如果要确保下载内容,则只需发出HTTP GET(使用Httpclient)并使用相同的HTTP标头来确定内容类型.