此URL会将您带到图像,但没有文件扩展名来检查正则表达式:
http://www.tonymooreillustration.com/gallery/main.php?g2_view=core.DownloadItem&g2_itemId=393
我在我的应用中使用Restclient(Ruby和REST客户端),所以我尝试这样做:
RestClient.get "http://www.tonymooreillustration.com/gallery/main.php?g2_view=core.DownloadItem&g2_itemId=393"
我收到许多以这样开头的文字:
"\377???JFIF\000\001\002\001\000H\000H\000\000\377?cExif\000\000MM\000*\000\000\000\b\000\a\001\022\000\003\000\000\000\001\000\001\000\000\001\032\000\005\000\000\000\001\000\000\000b\001\e\000\005\000\000\000\001\000\000\000j\001(\000\003\000\000\000\001\000\002\000\000\0011\000\002\000\000\000\024\000\000\000r\0012\000\002\000\000\000\024\000\000\000\206\207i\000\004\000\000\000\001\000\000\000\234\000\000\000?\000\000H\000\000\000\001\000\000\000H\000\000\000\001Adobe Photoshop 7.0\0002005:07:12 02:58:19\000\000\000\000\003\240\001\000\003\000\000\000\001\377\377\000\000\240\002\000\004\000\000\000\001\000\000\001?\000\004\000\000\000\001\000\000\002?\000\000\000\000\000\006\001\003\000\003\000\000\000
有没有办法可以用它来确定网址是否指向图片?
答案 0 :(得分:2)
您可以执行HEAD请求并检查MIME信息的标头。
请参阅:http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M000682
您在示例中得到的回应是图像本身。您还可以尝试使用像文件[1]这样的实用程序或像imagemagick [2]这样的图像库来确定是否是图片。
[1] http://unixhelp.ed.ac.uk/CGI/man-cgi?file [2] http://rmagick.rubyforge.org/
答案 1 :(得分:2)
看起来REST客户端响应包含了Ruby的Net::HTTPResponse
所以如果res
是RestClient.get
的结果,那么你应该可以做到:
res.net_http_res.header['content-type']
并查看是否以image/
开头,例如{JPEG}图像的image/jpeg
。
如果您实际上不需要图片的副本,只需要检查网址指向的内容,那么您最好按reto建议执行HEAD
请求。 (这可以避免收到不必要的正文内容副本。)
答案 2 :(得分:1)
你最好的选择是Content-Type
标题,但如果所有其他方法都失败了,你可以从初始字节集派生图像格式:
搜索<format> file format
,将<format>
替换为您需要识别的其他文件格式。
答案 3 :(得分:0)
我大约5年前在php中做过这个。可悲的是,我没有代码了。基本上我使用curl选项来跟踪所有重定向。这样,返回程序的数据几乎总是我真正想要测试的。从那时起,我只会从内容中获取数据的前几个字节,并检查图像元数据是否存在以及是否为jpg,png或gif。让代码向您展示可能有助于更好地解释这一点,但它已经消失了。我把它比作吃之前“品尝”一个文件。
使用这种技术的好处是你实际上是在检查文件而不是依赖于标题信息,这通常是正确的,但并非总是如此。
答案 4 :(得分:0)
使用FastImage - 它会从网址中获取最低要求数据,以确定它是图像,图像类型和大小。