千家信息网

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

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关如何验证数据库中URL的有效性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。曲库中一些歌曲的URL虽然存在,但是根据URL
千家信息网最后更新 2025年01月20日如何验证数据库中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的有效性就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0