Unterstrich in Domain

  • 9 Antworten
  • Letztes Antwortdatum
J

JustinTime

Fortgeschrittenes Mitglied
19
Neuer Tag neues Problem. Diesmal etwas obskurer.

Ich wollte eben eine Android app schreiben die einen HTTP Post auf ein PHP Dokument durchführt das auf einem Nitrado Webserver liegt. Leider beinhaltet die Domain einen Unterstrich mit dem die apache java Funktion nicht klar kommt.

Der Code an dieser Stelle sieht so aus
Code:
 HttpClient httpclient = new DefaultHttpClient();
		    HttpPost httppost = new HttpPost("http://bla_1.vweb11.nitrado.net/home/register.php");

		    try {		       
		        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
		        nameValuePairs.add(new BasicNameValuePair("test", "bla"));		       
		        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

		        // Execute HTTP Post Request
		        HttpResponse response = httpclient.execute(httppost);

		    } catch (ClientProtocolException e) {
		        // TODO Auto-generated catch block
		    } catch (IOException e) {
		        // TODO Auto-generated catch block
		    }

(stat "bla" steht in der URL natürlich sonst der Rest der Adresse)

und die wichtige Stelle der resultierenden Fehlermeldung

Code:
06-13 04:01:14.694: E/AndroidRuntime(4661): Caused by: java.lang.IllegalArgumentException: Host name may not be null06-13 04:01:14.694: E/AndroidRuntime(4661): 	at org.apache.http.HttpHost.<init>(HttpHost.java:83)


Hat jemand ähnliche Erfahrungen gemacht und eventuell einen Workaround gefunden? Eigentlich sind Unterstriche in Domains ja generell nicht erlaubt aber Browsern macht das ja keine Schwierigkeiten. Alles was ich dazu im Internet gefunden habe drehte sich darum das Domains keine Unterstriche haben dürfen oder das die Exception die geworfen wird einen besseren Text haben sollte...
 
Das gibt leider auch nur eine Exception weil er den Unterstrich in der Domain nicht anerkennt und das für ihn zu einem UnknownHost führt. Tief drinnen stolpern beide wohl über die URI.
 
Zuletzt bearbeitet:
Unterstriche sind auch gar nicht zulässig.

m Gegensatz zu Domainnamen dürfen Hostnames nur aus den ASCII-Zeichen a-z oder A-Z (zwischen Groß- und Kleinbuchstaben wird nicht unterschieden), 0-9 und dem Bindestrich - bestehen. Die einzelnen Labels dürfen nicht mit einem Bindestrich anfangen oder aufhören. Andere Sonderzeichen als der Bindestrich (und der Punkt zwischen den Labels) sind nicht erlaubt, obwohl sie gelegentlich trotzdem verwendet werden. Unterstriche werden oftmals auf Windows-Systemen verwendet, obwohl sie laut RFC 952 nicht zulässig sind.
Hostname

Ob und wie du das jetzt umgehen kannst weiß ich leider nicht :(
 
Ja das habe ich in den Apache Foren auch gefunden. Da wurde auch eher eine bessere Exception Beschreibung gewünscht und weniger auf das Problem an sich eingegangen :thumbup:
 
Das hier könnte ein Workaround sein:
Code:
        final URI uriObj = new URI("https", host, path, null, null);
         if (uriObj.getHost() == null) {             
         final Field hostField = URI.class.getDeclaredField("host");
             hostField.setAccessible(true);
             hostField.set(uriObj, host);
         }
         return uriObj;
 
Funktioniert leider auch nicht denn der Constructor von URI hällt sich an RFC 2396 in denen Unterstriche verboten sind. :bored:
 
Schmeißt der schon eine Exception?
 
Ja wieder eine urisyntaxexception. Ich werd mich mal einen anderen Webspace kümmern müssen der sich an die Richtlinien hällt.
 
Und wenn du im Constructor das Host attribute weglässt bzw auf null setzt und es hinterher per hand setzt wie in dem beispiel?
Funktioniert auch nicht?
 
Zurück
Oben Unten