httpclient: Post-method aber trotzdem "URI to long&quot

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hallo,

ich habe ein merkwürdiges Problem:

Ich benutze zur Datenübertragung zwischen 2 Servlet den http-cllient von Jakarta.
Vorher hatte ich das alles mit httpUrlConnection gemacht.
Damit konnte ich auch sehr grosse Dateien übertragen.
Nun hab ich komplett auf den http-client umgestellt.
Die Datenübertragung läuft immer noch, aber leider immer nur bis zu einer gewissen (sehr kleinen) Dateigröße.

Wird diese überschritten, krieg ich vom (wegen SSL vorgeschalteten) Apache die Fehlermeldung:

Code:
request failed: URI too long (longer than 8190)

Google sagt mir nun, das das nur bei "GET" passiert, da bei "POST" die Länge einer URL theoretisch unbegrenzt ist.

Tja, nun verstehe ich es nicht mehr, denn ich verwende die Post-Methode bei der Übertragung, hier der Code:

Code:
	protected String sendRequest(String urlParams) {

		String answer = null;
	
		HttpClient httpClient = new HttpClient();
		
		if(networkParams.isUseProxy()) {
			httpClient.getHostConfiguration().setProxy(networkParams.getProxyHost(), networkParams.getProxyPort());
			logger.info("we DO use a proxy: host:" + networkParams.getProxyHost() + "Port: " + new Integer(networkParams.getProxyPort()).toString());
		}
		if(networkParams.isUseProxyCredentials()) {
			httpClient.getState().setProxyCredentials(
							new AuthScope(networkParams.getProxyHost(), networkParams.getProxyPort()),
							new UsernamePasswordCredentials(networkParams.getProxyUserName(), networkParams.getProxyUserPassword()));
		}
		
		String url = networkParams.getRemoteProtocoll() + 
					  networkParams.getRemoteDestinationAdress() + 
					  ":" + 
					  networkParams.getRemoteDestinationPort() + 
					  networkParams.getRemoteDestinationPath();
		
		HttpMethod method = new PostMethod(url);
		method.setQueryString(urlParams);
	
		try {
			int statusCode = httpClient.executeMethod(method);
			if (statusCode != HttpStatus.SC_OK) {
				logger.error(OutputConstants.ERR_WRONG_RESPONSE + CommonOutput.LOG_SPACER + statusCode);
				return null;
			}
			answer = method.getResponseBodyAsString();
		} catch (HttpException e) {
			logger.error(e.getMessage());
			logger.error(e);
			return null;
		} catch (IOException e) {
			logger.error(e.getMessage());
			logger.error(e);
			return null;
		}
		finally {	
			method.releaseConnection();
		}
		return answer;
	}

Relevant dürfte hierbei das sein:

Code:
HttpMethod method = new PostMethod(url);

Das passt doch soweit alles, wo ist denn das Problem?

An den Apache-Einstellungen kann es eigentlich nicht liegen, weil an denen hab ich nichts verändert. Und mit "Post" über httpUrlConnection gingen ja auch große Dateien....

Ich bin verwirrt, hat jemand ne Idee?
 

AlArenal

Top Contributor
Die Länge der URI hat nichts mit der HTTP-Methode am Hut.

Warum schaust du nicht einfach wie lang deine URI ist? Ist doch naheliegend dem nachzugehen, wenn die Länge angemahnt wird...

Die maximale Länge einer URI ist generell durch den Server begrenzt. Aktuell dürften die meisten ein Limit von 8192 Bytes setzen, es kann aber auch noch in vielen Fällen 4096 oder 2048 Bytes betragen.

Die Größe der mit POST übertragbaren Datenmengen hat nichts mit der URI zu tun. Die Größe eines Hauses lässt sich auch nicht allein durch seine Anschrift ermitteln...
 

jollyroger

Bekanntes Mitglied
Hi,

nach nochmaligem Lesen ist mir dann aufgefallen, das ich meine Argumente an die Uri anhänge.

Ich finde die API-Doku etwas verwirrend, ich hatte es anfänglich so verstanden, das ich das in den post-request body reinschreibe.

"addParameter()" wäre der richtige Aufruf gewesen...

Korrigiert mich wenn ich falsch liege, aber ich finde es etwas unsinnig, das man bei der POST-Methode auch "GET" verwenden kann, da einem die Methode ja die Möglichkeit bietet GET-like Parameter an die URI anzuhängen (was ich ja auch getan habe...)
 

Drake

Bekanntes Mitglied
Du wolltest bestimmt sagen nach dem man dir in der Mailinglist eine Antwort schickte und dich darauf hinwies :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
dayaftereh HttpClient Post, Get Cookie Allgemeine Java-Themen 1
TheSkyRider Whitespace im Java9 HTTPClient Allgemeine Java-Themen 8
S HTTP Apache HTTPClient Problem Allgemeine Java-Themen 4
E Eclipse Axis, Jena, HTTPClient - log4j Meldungen deaktivieren? Allgemeine Java-Themen 6
G Mit Java und HTTPClient auf Webseite einloggen Allgemeine Java-Themen 4
J Methode mit HttpClient aufrufen Allgemeine Java-Themen 5
M asynchroner HttpClient() in Thread Allgemeine Java-Themen 2
J jakarta httpclient: funktioniert nicht mit proxy Allgemeine Java-Themen 2
I executeMethod() von HttpClient Allgemeine Java-Themen 2
G Json POST-REQUEST Allgemeine Java-Themen 14
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
P REST- Services GET/PUT/POST/DELETE Allgemeine Java-Themen 6
J Post: #1could not create the java virtual machine etc Allgemeine Java-Themen 6
J Übergabe von post request Parametern Allgemeine Java-Themen 9
S http POST überwachen Allgemeine Java-Themen 2
S OutputStream via POST senden Allgemeine Java-Themen 4
P POST Problem Allgemeine Java-Themen 5
A POST Allgemeine Java-Themen 6
thE_29 CGI Seite + Post Methoden Allgemeine Java-Themen 2
P URL mit POST variablen aufrufen Allgemeine Java-Themen 5
P Post-Parameter übergeben Allgemeine Java-Themen 3
N Servlets: Formulardaten auslesen (POST) - mehr Informationen Allgemeine Java-Themen 4
A Formular POST übergabe an Servlet Allgemeine Java-Themen 4
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
J Final Method Allgemeine Java-Themen 9
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
J Reflection-Method Hook? Allgemeine Java-Themen 14
B Exception in Application init method Allgemeine Java-Themen 5
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
Thallius JSONArray - the method length() is undefined for JSONArray Allgemeine Java-Themen 4
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
C Method Area, Stack, Heap Allgemeine Java-Themen 7
R Stop a method??? Allgemeine Java-Themen 34
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
D Invalid Method declaration Allgemeine Java-Themen 5
N Method-Annotations in aufgerufener Methode auswerten Allgemeine Java-Themen 2
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
G JavaDoc: Spezielle Beschreibung nur in Method Detail Allgemeine Java-Themen 5
faetzminator IllegalArgumentException bei Method.invoke() Allgemeine Java-Themen 6
R Fehler:method does not override a method from its superclass Allgemeine Java-Themen 3
G javax.jms.IllegalStateException: This method. Allgemeine Java-Themen 4
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
R The mark method of InputStream does nothing. Allgemeine Java-Themen 4
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
O Pointer/reference on method Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben