跳过“;java.net.ConnectException:Connection;HttpURLConnection在getResponseCode上返回错误

跳过“;java.net.ConnectException:Connection;HttpURLConnection在getResponseCode上返回错误,java,connection,httpresponse,httpwebresponse,Java,Connection,Httpresponse,Httpwebresponse,我有个问题。我有一个CSV文件,其中包含url(~12000)个响应代码我需要检查。我的程序已经逐个检查了url。但在34次迭代之后,我的代码每次都会下降。第34行的URL不存在。如何将代码修改为下次遇到此错误程序跳过一个并继续工作。 我写了一段代码: 包lt.local import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.C

我有个问题。我有一个
CSV
文件,其中包含
url
(~12000)个响应代码我需要检查。我的程序已经逐个检查了
url
。但在34次迭代之后,我的代码每次都会下降。第34行的URL不存在。如何将代码修改为下次遇到此错误程序跳过一个并继续工作。 我写了一段代码: 包lt.local

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;

public class OffersUrlChecker {
    private static final String SAMPLE_CSV_FILE_PATH = "d:\\LENAL\\ZUD\\load\\offers.csv";
    public static void main(String[] args) throws IOException {
        try (
            Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
            CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)
        ){
         Iterable<CSVRecord> csvRecords = csvParser.getRecords();
            for (CSVRecord csvRecord : csvRecords) {
                String url = csvRecord.get(0);
                URL myUrl = new URL(url);
                HttpURLConnection myUrlCon = (HttpURLConnection) myUrl.openConnection();
                int code = myUrlCon.getResponseCode();
                System.out.println(csvRecord.getRecordNumber()+" - "+code+" " + url);
                }
            }/*catch (ConnectException e){
            System.out.println("java.net.ConnectException: Connection refused: connect");
        }*/
    }
}
import org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVParser;
导入org.apache.commons.csv.CSVRecord;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.Reader;
导入java.net.ConnectException;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.nio.file.Files;
导入java.nio.file.path;
公共类OfferUrlChecker{
私有静态最终字符串示例\u CSV\u文件\u PATH=“d:\\LENAL\\ZUD\\load\\offers.CSV”;
公共静态void main(字符串[]args)引发IOException{
试一试(
Reader Reader=Files.newbuffereder(PATH.get(SAMPLE_CSV_FILE_PATH));
CSVParser CSVParser=新的CSVParser(读卡器,CSVFormat.DEFAULT)
){
Iterable csvRecords=csvParser.getRecords();
用于(CSVRecord CSVRecord:CSVRecord){
字符串url=csvRecord.get(0);
URL myUrl=新URL(URL);
HttpURLConnection myUrlCon=(HttpURLConnection)myUrl.openConnection();
int code=myUrlCon.getResponseCode();
System.out.println(csvRecord.getRecordNumber()+“-”+代码+”+url);
}
}/*捕获(连接异常){
System.out.println(“java.net.ConnectException:connect拒绝:connect”);
}*/
}
}

线程“main”java.net.ConnectException:连接被拒绝:连接 位于java.net.DualStackPlainSocketImpl.connect0(本机方法) 位于java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 位于java.net.socksocketimpl.connect(socksocketimpl.java:392) 位于java.net.Socket.connect(Socket.java:589) 位于sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673) 位于sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173) 位于sun.net.NetworkClient.doConnect(NetworkClient.java:180) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:463) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:558) 在sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:264) 位于sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 位于sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138) 位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 位于java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 位于sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338) 位于lt.zudykkaina.OffersUrlChecker.main(OffersUrlChecker.java:29) 进程已完成,退出代码为1
克服此问题的三条建议:

  • 将调用嵌入到try-catch块中
  • 关闭URL连接以释放资源。您可能正在积累打开的套接字
  • 每次出错后,请稍等片刻,然后再继续。某些服务器可能会因为以非常快的顺序命中它们的URL而阻止您
  • 大致如下:

    public class OffersUrlChecker {
    
        private static final String SAMPLE_CSV_FILE_PATH = "d:\\LENAL\\ZUD\\load\\offers.csv";
    
        public static void main(String[] args) throws IOException {
            try (
                    Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
                    CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)
            ) {
                Iterable<CSVRecord> csvRecords = csvParser.getRecords();
                for (CSVRecord csvRecord : csvRecords) {
                    String url = csvRecord.get(0);
                    URL myUrl = new URL(url);
                    HttpURLConnection myUrlCon = null;
                    try {
                        myUrlCon = (HttpURLConnection) myUrl.openConnection();
                        int code = myUrlCon.getResponseCode();
                        System.out.println(csvRecord.getRecordNumber() + " - " + code + " " + url);
                    } catch (Exception e) {
                        Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.SEVERE,
                                String.format("Could not read from %s", url), e);
                        // sleep a bit
                        try {
                            TimeUnit.SECONDS.sleep(10);
                        } catch (InterruptedException e1) {
                            Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.WARNING,
                                    "Sleep interrupted", e);
                        }
                    } finally {
                        if (myUrlCon != null) {
                            myUrlCon.disconnect(); // Make sure you close the sockets
                        }
                    }
                }
            }
        }
    }
    
    公共类OfferUrlChecker{
    私有静态最终字符串示例\u CSV\u文件\u PATH=“d:\\LENAL\\ZUD\\load\\offers.CSV”;
    公共静态void main(字符串[]args)引发IOException{
    试一试(
    Reader Reader=Files.newbuffereder(PATH.get(SAMPLE_CSV_FILE_PATH));
    CSVParser CSVParser=新的CSVParser(读卡器,CSVFormat.DEFAULT)
    ) {
    Iterable csvRecords=csvParser.getRecords();
    用于(CSVRecord CSVRecord:CSVRecord){
    字符串url=csvRecord.get(0);
    URL myUrl=新URL(URL);
    HttpURLConnection myUrlCon=null;
    试一试{
    myUrlCon=(HttpURLConnection)myUrl.openConnection();
    int code=myUrlCon.getResponseCode();
    System.out.println(csvRecord.getRecordNumber()+“-”+代码+”+url);
    }捕获(例外e){
    Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.SEVERE,
    格式(“无法从%s中读取”,url),e);
    //睡一会儿
    试一试{
    时间单位。秒。睡眠(10);
    }捕捉(中断异常e1){
    Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.WARNING,
    “睡眠中断”,e);
    }
    }最后{
    如果(myUrlCon!=null){
    myUrlCon.disconnect();//确保关闭套接字
    }
    }
    
    public class OffersUrlChecker {
    
        private static final String SAMPLE_CSV_FILE_PATH = "d:\\LENAL\\ZUD\\load\\offers.csv";
    
        public static void main(String[] args) throws IOException {
            try (
                    Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
                    CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)
            ) {
                Iterable<CSVRecord> csvRecords = csvParser.getRecords();
                for (CSVRecord csvRecord : csvRecords) {
                    String url = csvRecord.get(0);
                    URL myUrl = new URL(url);
                    HttpURLConnection myUrlCon = null;
                    try {
                        myUrlCon = (HttpURLConnection) myUrl.openConnection();
                        int code = myUrlCon.getResponseCode();
                        System.out.println(csvRecord.getRecordNumber() + " - " + code + " " + url);
                    } catch (Exception e) {
                        Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.SEVERE,
                                String.format("Could not read from %s", url), e);
                        // sleep a bit
                        try {
                            TimeUnit.SECONDS.sleep(10);
                        } catch (InterruptedException e1) {
                            Logger.getLogger(OffersUrlChecker.class.getName()).log(Level.WARNING,
                                    "Sleep interrupted", e);
                        }
                    } finally {
                        if (myUrlCon != null) {
                            myUrlCon.disconnect(); // Make sure you close the sockets
                        }
                    }
                }
            }
        }
    }