如何验证数据库中URL的有效性

这篇文章将为大家详细讲解有关如何验证数据库中URL的有效性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、成都网站建设、外贸网站建设易于使用并且具有良好的响应性。

曲库中一些歌曲的URL虽然存在,但是根据URL已经下载不到音乐了.
Nginx显示404错误.

验证数据库中歌曲的URL是否能够下载

首先,先把数据库中的歌曲URL导出到文件.如下格式(歌曲ID,音乐地址类型,路径)
1000;AccompanimentURL ;/00/00/00001000_accompaniment.m4a

然后使用程序扫描URL

       
            org.apache.logging.log4j
            log4j-api
            2.7

        

        
            org.apache.logging.log4j
            log4j-core
            2.7
        

        
            io.netty
            netty-all
            4.1.0.Final
        


程序比较渣..以后得学习一下对象封装


    • import java.io.BufferedReader;  

    • import java.io.FileInputStream;  

    • import java.io.FileWriter;  

    • import java.io.IOException;  

    • import java.io.InputStreamReader;  

    • import java.util.HashMap;  

    • import java.util.HashSet;  

    • import java.util.Map;  

    • import java.util.Set;  

    • import java.util.concurrent.BlockingQueue;  

    • import java.util.concurrent.LinkedBlockingQueue;  

    • import java.util.concurrent.Semaphore;  

    • import java.util.concurrent.atomic.AtomicInteger;  

    •   

    • import io.netty.bootstrap.Bootstrap;  

    • import io.netty.buffer.ByteBuf;  

    • import io.netty.buffer.Unpooled;  

    • import io.netty.channel.Channel;  

    • import io.netty.channel.ChannelHandlerContext;  

    • import io.netty.channel.ChannelInboundHandlerAdapter;  

    • import io.netty.channel.ChannelInitializer;  

    • import io.netty.channel.EventLoopGroup;  

    • import io.netty.channel.nio.NioEventLoopGroup;  

    • import io.netty.channel.socket.nio.NioSocketChannel;  

    • import io.netty.handler.codec.LineBasedFrameDecoder;  

    • import io.netty.handler.codec.string.StringDecoder;  

    •   

    • public class URLChecker {  

    •     public static void main(String[] args) {  

    •         String sourceFile="F:\\normal.txt";  

    •         String resultFile="F:\\result.csv";  

    •         new URLInput(sourceFile, resultFile);  

    •           

    •     }  

    •   

    • }  

    •   

    • class URLConnection extends Thread{  

    •     @Override  

    •     public void run() {  

    •         while(true){  

    •             int start=count.get();  

    •             try {  

    •                 Thread.sleep(1000);  

    •             } catch (InterruptedException e) {  

    •                 // TODO Auto-generated catch block  

    •                 e.printStackTrace();  

    •             }  

    •             int end=count.get();  

    •             System.out.println("每秒检查:"+(end-start));  

    •         }  

    •     }  

    •   

    •     Semaphore sem = new Semaphore(20);  

    •     String[] hosts = new String[5];  

    •     AtomicInteger count = new AtomicInteger();  

    •   

    •     EventLoopGroup group = new NioEventLoopGroup(3);  

    •     URLInput input;  

    •     URLOutput output;  

    •     URLConnection(URLInput input,URLOutput writer) {  

    •         hosts[0] = "172.16.1.151";  

    •         hosts[1] = "172.16.1.152";  

    •         hosts[2] = "172.16.1.153";  

    •         hosts[3] = "172.16.1.154";  

    •         hosts[4] = "172.16.1.155";  

    •           

    •         this.output=writer;  

    •         this.input=input;  

    •   

    •     }  

    •   

    •     public void connection(final Map map)  

    •             throws InterruptedException {  

    •         sem.acquire();  

    •         int index = count.getAndIncrement();  

    •         Bootstrap boot = new Bootstrap();  

    •   

    •         boot.group(group).channel(NioSocketChannel.class).handler(new ChannelInitializer() {  

    •             @Override  

    •             protected void initChannel(Channel ch) throws Exception {  

    •                 ch.pipeline().addLast(new LineBasedFrameDecoder(409600));  

    •                 ch.pipeline().addLast(new StringDecoder());  

    •                 ch.pipeline().addLast(new HttpClientHandler(map, sem,input,output));  

    •             }  

    •         });  

    •         boot.connect(hosts[index % hosts.length], 80);  

    •   

    •     }  

    •       

    •       

    • }  

    •   

    • class HttpClientHandler extends ChannelInboundHandlerAdapter {  

    •     StringBuffer sb = new StringBuffer(512);  

    •     Map map = new HashMap();  

    •     Semaphore sem;  

    •     URLInput input;  

    •     URLOutput writer;  

    •   

    •   

    •     public HttpClientHandler(Map map, Semaphore sem, URLInput input, URLOutput writer) {  

    •         this.map = map;  

    •         this.sem = sem;  

    •   

    •         this.writer=writer;  

    •         this.input=input;  

    •     }  

    •   

    •     @Override  

    •     public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {  

    •         sem.release();  

    •           

    •         ctx.close();  

    •         writer.addSuccURL(map);  

    •     }  

    •   

    •     @Override  

    •     public void channelActive(ChannelHandlerContext ctx) throws Exception {  

    •   

    •         StringBuilder sb = new StringBuilder();  

    •         sb.append("HEAD " + map.get("url") + " HTTP/1.0\r\n");  

    •         sb.append("HOST:" + 80 + "\r\n");  

    •         sb.append("Accept:*/*\r\n");  

    •         sb.append("\r\n");  

    •         ByteBuf bb = Unpooled.copiedBuffer(sb.toString().getBytes("utf8"));  

    •         ctx.writeAndFlush(bb);  

    •   

    •     }  

    •   

    •     @Override  

    •     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {  

    •         String content = (String) msg;  

    •         if (content.contains(":")) {  

    •             String[] s = content.split(":");  

    •             map.put(s[0].trim(), s[1].trim());  

    •         } else if (content.startsWith("HTTP/1.1")) {  

    •             map.put("httpcode", content.replaceAll("HTTP/1.1 ", ""));  

    •         }  

    •   

    •     }  

    •   

    •     @Override  

    •     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {  

    •         cause.printStackTrace();  

    •         ctx.close();  

    •         input.addFailUrl(map);  

    •         sem.release();  

    •     }  

    •   

    • }  

    •   

    • class URLInput {  

    •     URLConnection urlcon;  

    •     URLInput(String sourceFile, String resultFile) {  

    •         URLOutput output=new URLOutput(resultFile);  

    •         urlcon=new URLConnection(this, output);  

    •         output.start();  

    •         urlcon.start();  

    •         try {  

    •             init(resultFile);  

    •             read(sourceFile);  

    •         } catch (IOException e) {  

    •             e.printStackTrace();  

    •         } catch (InterruptedException e) {  

    •             e.printStackTrace();  

    •         }  

    •     }  

    •   

    •     /**  

    •      * 初始化已经处理的文件,用于中断处理后的恢复运行  

    •      *   

    •      * @param resultFile  

    •      * @throws IOException  

    •      */  

    •     private void init(String resultFile) throws IOException {  

    •         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(resultFile)));  

    •         String row = null;  

    •         while ((row = br.readLine()) != null) {  

    •             String[] data = row.split(",");  

    •             set.add(data[0]);  

    •   

    •         }  

    •         br.close();  

    •     }  

    •   

    •     public void addFailUrl(Map map) {  

    •         failq.add(map);  

    •     }  

    •   

    •     final BlockingQueue> failq = new LinkedBlockingQueue>();  

    •     Set set = new HashSet();  

    •   

    •     private void read(String sourceFile) throws IOException, InterruptedException {  

    •         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile)));  

    •         String row = null;  

    •         while ((row = br.readLine()) != null) {  

    •             while (failq.size() != 0) {  

    •   

    •                 final Map m = failq.take();  

    •                 urlcon.connection(m);  

    •             }  

    •   

    •             String[] data = row.split(";");  

    •             final Map map = new HashMap();  

    •             map.put("songid", data[0]);  

    •             map.put("type", data[1]);  

    •             map.put("url", data[2]);  

    •             if (!set.contains(data[0])) {  

    •                 urlcon.connection(map);  

    •             }  

    •         }  

    •         br.close();  

    •         System.out.println("Finish!!");  

    •     }  

    • }  

    •   

    • class URLOutput extends Thread {  

    •     BlockingQueue> succq = new LinkedBlockingQueue>();  

    •     String resultFile;  

    •   

    •     public void addSuccURL(Map map) {  

    •         succq.add(map);  

    •     }  

    •   

    •     public URLOutput(String resultFile) {  

    •         this.resultFile = resultFile;  

    •     }  

    •   

    •     @Override  

    •     public void run() {  

    •         Map map = null;  

    •         FileWriter fw = null;  

    •         try {  

    •             fw = new FileWriter(resultFile, true);  

    •             while ((map = succq.take()) != null) {  

    •                 fw.write(map.get("songid") + "," + map.get("type") + "," + map.get("url") + "," + map.get("httpcode")  

    •                         + "," + map.get("Content-Length") + "\n");  

    •             }  

    •         } catch (InterruptedException e) {  

    •             e.printStackTrace();  

    •         } catch (IOException e) {  

    •             e.printStackTrace();  

    •         } finally {  

    •             try {  

    •                 fw.close();  

    •             } catch (IOException e) {  

    •                 e.printStackTrace();  

    •             }  

    •         }  

    •     }  

    •   


    关于如何验证数据库中URL的有效性就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


    本文标题:如何验证数据库中URL的有效性
    分享链接:http://myzitong.com/article/gjspip.html