URL-Aufruf mit Parametern über POST

PetraB

Mitglied
Hallo zusammen,

ich habe Probleme beim Aufruf einer URL bzw. der Übergabe einiger Parameter per POST. Meine Funktion sieht derzeit folgendermaßen aus:

Code:
Properties properties = new Properties();
		URL url;
	    HttpURLConnection connection = null;  
	    try {
	      properties.loadFromXML(new FileInputStream("properties.xml"));
	      //Create connection
	      url = new URL(properties.getProperty("urlwps"));
	      connection = (HttpURLConnection)url.openConnection();
	      connection.setRequestMethod("POST");
	      connection.setRequestProperty("Content-Type", 
	           "application/x-www-form-urlencoded");
	      
	      String urlParameters = "service=" + URLEncoder.encode("wps", "UTF-8") +
	      						"&version=" + URLEncoder.encode("1.0.0", "UTF-8") +
	      						"&request=" + URLEncoder.encode("identifier", "UTF-8") +
	      						"&version=" + URLEncoder.encode("execute", "UTF-8") +
	      						"&identifier=" + URLEncoder.encode("los", "UTF-8") +
	      						"&datainputs=" + URLEncoder.encode("east="+x+";north="+y+";height=1.80;maxdist=80;gml="+properties.getProperty("gml"), "UTF-8");
	      
	      connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
	      connection.setRequestProperty("Content-Language", "en-US");  
				
	      connection.setUseCaches (false);
	      connection.setDoInput(true);
	      connection.setDoOutput(true);
	
	      //Send request
	      DataOutputStream wr = new DataOutputStream (connection.getOutputStream ());
	      wr.writeBytes (urlParameters);
	      wr.flush ();
	      wr.close ();
	
	      //Get Response	
	      InputStream is = connection.getInputStream();
	      BufferedReader rd = new BufferedReader(new InputStreamReader(is));
	      String line;
	      StringBuffer response = new StringBuffer(); 
	      while((line = rd.readLine()) != null) {
	        response.append(line);
	        System.out.println(line);
	        response.append('\r');
	      }
	      rd.close();
	
	    } catch (Exception e) {
	
	      e.printStackTrace();
	
	    } finally {
	
	      if(connection != null) {
	        connection.disconnect(); 
	      }
	    }

Als Fehlermeldung erhalte ich immer:

Code:
java.io.IOException: Server returned HTTP response code: 500 for URL: http://vm116.rz.uni-osnabrueck.de/cgi-bin/wps?
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1261)
	at POISelection.getWPS(POISelection.java:192)
	at POISelection.POIMain(POISelection.java:360)
	at POIServlet.doPost(POIServlet.java:202)
[...]

Der Aufruf über GET funktioniert aber, der Service ist also erreichbar. Ich habe es auch schon mit dem HttpClient von Apache versucht, aber das hat auch nicht funktioniert und stiftete durch den Versionswechsel eher noch mehr für Verwirrung meinerseits...

Nun hoffe ich also, dass ich hier noch Tipps bekomme, wie ich die Parameter richtig übergeben muss, damit der Aufruf auch per POST funktioniert!

Schonmal vielen Dank

Petra
 
Das Problem habe ich zwar nicht herausgefunden, aber das würde so ohnehin nicht laufen, denn bei POST-Requests musst du nicht nur die values verschlüsseln, sondern auch die keys. Das müsste also eigentlich so aussehen:
Java:
String urlParameters = URLEncoder.encode("service", "UTF-8") + "=" + URLEncoder.encode("wps", "UTF-8") +
                                "&" + URLEncoder.encode("version", "UTF-8") + "=" + URLEncoder.encode("1.0.0", "UTF-8") +
                                "&" + URLEncoder.encode("request", "UTF-8") + "=" + URLEncoder.encode("identifier", "UTF-8") +
                                "&" + URLEncoder.encode("version", "UTF-8") + "=" + URLEncoder.encode("execute", "UTF-8") +
                                "&" + URLEncoder.encode("identifier", "UTF-8") + "=" + URLEncoder.encode("los", "UTF-8") +
                                "&" + URLEncoder.encode("datainputs", "UTF-8") + "=" + URLEncoder.encode("east="+x+";north="+y+";height=1.80;maxdist=80;gml="+properties.getProperty("gml"), "UTF-8");
 
Danke für den Hinweis, das war mir so gar nicht bewusst.

Ist an dem Code sonst noch ein Fehler zu entdecken? Oder gibt es vielleicht andere Vorschläge, wie ich den Aufruf machen kann?
 
Das kann ich so nicht sagen, denn bei mir funktioniert der Code, jedenfalls wenn ich ein Request an ein PHP-Skript schicke. Andere Sachen habe ich nicht ausprobiert.
 
HTTP 500 - INTERNAL SERVER ERROR

schon mal über die error-meldung nachgedacht ...
HTTP 500 deutet auf einen fehler im server hin ... nicht auf einen fehler deiner app
also überprüf erstmal das script ...
dazu würde ich sagen das du es entsprechend der sprache in der entsprechenden kategorie hier auf tutorials stellst
einige hier beherschen zwar auch web-sprachen ... und es gehört ja auch teilweise hier zum thema ... aber wenn es schon entsprechende foren gibt sollte man die auch nutzen
 
Hallo,

vielen Dank für die Hinweise. Ich habe jetzt erstmal Kontakt zu demjenigen aufgenommen, der den Service, auf den ich zugreifen will, aufgesetzt hat. Evtl. müssen die Parameter anders übergeben werden. Für mich ist erstmal beruhigend, dass mein Code funktionieren _müsste_!

Viele Grüße

Petra
 
Zurück