gpt4 book ai didi

java - 跳过 HttpURLConnection 在 getResponseCode 上返回的 "java.net.ConnectException: Connection"错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:38 25 4
gpt4 key购买 nike

我有一个问题。我有一个 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");
}*/
}
}

Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at lt.zudykkaina.OffersUrlChecker.main(OffersUrlChecker.java:29)

Process finished with exit code 1

最佳答案

解决此问题的三个建议:

  1. 将调用嵌入到 try catch block 中。
  2. 关闭 URL 连接以释放资源。您可能正在积累打开的套接字。
  3. 每次出错后请稍等一下,然后再继续。有些服务器可能会因为快速访问其 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
}
}
}
}
}
}

关于java - 跳过 HttpURLConnection 在 getResponseCode 上返回的 "java.net.ConnectException: Connection"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com