hallo,
ich habe probleme mit folgenden Exceptions
SocketTimeoutException: connect timed out
SocketTimeoutException: Read timed out
IOException: Server returned HTTP response code: 403 for URL: ....
ich lade mir eine liste von proxies und starte dann etwa 10 Threads mit dem nachfolgenden Quelltext.
Dabei kommen bei bestimmten Proxies die oben genannten Fehler, mal früher mal später.
Ich habe keine Ahnung woran es liegen kann, da selbst super perfomer Proxys diese Fehler haben.
Gibt es eine bestimmte Wartezeit zwischen Requests die man einhalten sollte?
Hat man bei bestimmten Proxies nur begrenzte Zugriffe?
Hat vielleicht irgendjemand eine Idee?
Danke
ich habe probleme mit folgenden Exceptions
SocketTimeoutException: connect timed out
SocketTimeoutException: Read timed out
IOException: Server returned HTTP response code: 403 for URL: ....
ich lade mir eine liste von proxies und starte dann etwa 10 Threads mit dem nachfolgenden Quelltext.
Dabei kommen bei bestimmten Proxies die oben genannten Fehler, mal früher mal später.
Ich habe keine Ahnung woran es liegen kann, da selbst super perfomer Proxys diese Fehler haben.
Gibt es eine bestimmte Wartezeit zwischen Requests die man einhalten sollte?
Hat man bei bestimmten Proxies nur begrenzte Zugriffe?
Hat vielleicht irgendjemand eine Idee?
Danke
Java:
SocketAddress addr = new InetSocketAddress(this.proxy.IP, this.proxy.port);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
try {
long startDownload = new Date().getTime(); //Zeit stoppen für Beendenstatus=3
URLConnection conn = url.openConnection(proxy);
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)");
//conn.setRequestProperty("Host", ip);
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
conn.setRequestProperty("Keep-Alive", "30");
conn.setRequestProperty("Connection", "keep-alive");
conn.setConnectTimeout(Crawler.SocketTimeMax);
conn.setReadTimeout(Crawler.SocketTimeMax);
try{
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer quelltext =new StringBuffer();
//nur Test //TODO
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("name.txt") ) );
long start = new Date().getTime();
boolean test= true;
while(br.ready() && test){
long end = new Date().getTime();
if(end-start>15000){
System.out.println("datei downloaden länger als 15sek");
test= false;
beendenStatus = 1;
}
String line =br.readLine(); //TODO nur test ansonsten direkt appenden
out.write(line);
out.newLine();
quelltext.append(line);
}
br.close();
//Download-Ende
long downloadzeit = new Date().getTime() - startDownload;
if(downloadzeit>Crawler.DownloadTimeMax){
//Proxy ist zu langsam
this.beendenStatus = 3;
}
//TODO Interpreter
//wenn items verfügbar this.beendenStatus = 2;
out.close();
//DOS attack vermeiden
try {
Thread.sleep(Math.max(0, 1250-downloadzeit));//-downloadzeit
} catch (InterruptedException e) {
System.out.println("Sleep war nicht möglich");
}
System.out.println("FERTIG: "+ID+" Zeit: "+(new Date().getTime() - startCrawler));
}catch(java.net.SocketTimeoutException e){
this.beendenStatus = 1;
System.out.println("SocketTimeOUT: "+"ID: "+ID+" SocketTimeoutException: "+e.getLocalizedMessage());
}catch(java.net.SocketException e){
this.beendenStatus = 1;
System.out.println("SocketException: "+ID);
}catch(IOException e){
this.beendenStatus = 1;
System.out.println("IOException: "+ID+" "+e.getLocalizedMessage());
}
} catch (MalformedURLException e) {
this.beendenStatus = 1;
e.printStackTrace();
}catch (IOException e) {
this.beendenStatus = 1;
e.printStackTrace();
}