# Socket Problem -Proxies



## java4love (2. Apr 2010)

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


```
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();
			}
```


----------



## musiKk (2. Apr 2010)

Naja, das hat ja nichts mit "super performant" zu tun. 403 heißt forbidden. Der Grund kann von Willkür bis Verbindungslimits alles sein.


----------



## java4love (2. Apr 2010)

sonst bleibt mir nichts übrig um etwas weiteres herauszufinden?
d.h ich muss echt immer wenn so ein fehler auftritt den proxy wechseln


----------

