1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

HttpURLConnection Problem mit extra Headern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von 3c5x9, 14.02.2010.

  1. 3c5x9, 14.02.2010 #1
    3c5x9

    3c5x9 Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    28.02.2009
    Hi zusammen,
    Ich hab da mal ein Problem, über das evtl. schon jemand gestolpert ist.

    Ich habe einen Webserver, der etwas pingelig ist bei der Auswertung der HTTP-Header. Am folgenden Beispiel gut zu sehen:

    Code:
    root@rechner:/#  wget "http://remotehost.de" --header 'Authorization: Basic  cm9vdDpyaWWW'
    Connecting to http://remotehost.de[83.135.88.1]:8010
    currentservicedata    100%  |**********************************************************************************************************************************************************|    836       00:00 ETA         |     0       --:-- ETA
    root@rechner:/#  wget "http://http://remotehost.de" --header 'authorization: Basic  cm9vdDpyaWWW'
    Connecting to http://remotehost.de[83.135.88.1]:8010
    wget:  server returned error 401: HTTP/1.1 401 Unauthorized
    
    
    Er akzeptiert das Authorization-Field nur wenn er wirklich "Authorization" geschickt wird. Bei "authorization" erkennt er es nicht.

    Nu hab ich in Android (SDK 1.6) in meiner anwendung folgenden Code um diese Authorization zu senden, plus noch 2 Felder die das Problem zusätzlich verdeutlichen:

    Code:
    URL url = new URL("http://someadress");
    HttpURLConnection  http = (HttpURLConnection) url.openConnection();
    String encoding =  Base64Converter.encode((_profile.getUsername() + ":" +  _profile.getPassword()).getBytes());
    http.setRequestProperty("User-Agent",  "Enigmanoid");
    http.setIfModifiedSince(123456789);
    http.setRequestProperty("Authorization",  "Basic " + encoding);
    http.getInputStream();
    
    Ich habe, nachdem ich ständig nur "HTTP/1.1 401 Unauthorized" von Server zurück bekommen habe, die Anfragen über einen Proxy umgeleitet. Und da kann man dann sehen, das alles was ich an zusätzlichen Headern schicke, in Kleinschreibung gesendet wird:

    Code:
    user-agent:  Enigmanoid
    if-modified-since: Fri, 02 Jan 1970 10:17:36 GMT
    authorization:  Basic cm9vdDpyaWWW
    Connection: keep-alive
    
    Wenn ich den User-Agent in meinem Code weg lasse und nicht überschreibe, wird er korrekt als "User-Agent: Java0" gesendet. Auch "if-modified-since" müsste als "If-Modified-Since" gesendet werden.

    Hab das nun im Emulator und auf dem G1 getestet, beide Male das gleiche Verhalten.

    Hat da jemand eine Idee zu, wie man dieses "".toLowerCase() abschalten kann?

    Gruß
    3zeh
     
    Zuletzt bearbeitet: 14.02.2010
  2. garak, 14.02.2010 #2
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    Für HTTP-Connections arbeite ich grundsätzlich mit dem HttpClient von Apache, der auch Bestandteil von Android ist.

    Das könnte dann so aussehen:
    Code:
        URI uri = new URI("http://irgendwas");
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(uri);
        post.setHeader("User-Agent",  "Enigmanoid");
        HttpResponse response = client.execute(post);
    
    Gruß
    Chris
     
    Zuletzt bearbeitet: 14.02.2010
  3. 3c5x9, 15.02.2010 #3
    3c5x9

    3c5x9 Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    28.02.2009
    Hi Chris,
    Lüppt. Dank dir.

    Nun muss ich ihm noch über die Methode SSL mit selbst generierten Zertifikaten bei bringen. Aber das wird schon. Hast mir geholfen. Danke schön.

    Gruß
    3zeh
     

Diese Seite empfehlen