2016-07-03 16 views
2

Ich habe eine Java-Anwendung mit dem folgenden Code. Ich versuche, einen REST-Webdienst mithilfe von HttpClient POST aufzurufen. Ich muss einen benutzerdefinierten Header "Auth" für die Authentifizierung senden. Der Wert des Headers ist die verschlüsselten Credentials, die durch ein ":" getrennt sind.HTTP-Fehler 400. Die Anfrage hat einen ungültigen Header-Namen

 String strAuth = DoAESEncrypt("userid:pwd"); 
     String strContent = DoAESEncrypt("{\"Name\":Tester,\"Id\":\"123\",\"NickName\":null,\"IsLocked\":false}"); 

      HttpClient client = new DefaultHttpClient();   
      HttpPost post = new HttpPost("https://domainname/servicename"); 
      post.addHeader("auth",strAuth); 
      post.addHeader("Content-Type", "application/json"); 
      StringEntity input = new StringEntity(strContent); 
      post.setEntity(input); 
      HttpResponse response = client.execute(post); 

The DoAESEncrypt ist eine Funktion, die die Eingabezeichenfolge und gibt die Chiffre verschlüsselt. Allerdings, wenn ich diesen Code ausführen, ich die unten Fehlermeldung erhalten, wo ich die Aussage client.execute habe:

HTTP Error 400. Die Anfrage enthält einen ungültigen Header-Namen

Allerdings, wenn ich hart -Code den unten Header mit dem verschlüsselten Cipher ich die gleiche DoAESEncrypt Funktion erzeugt mit, es funktioniert gut:

 post.addHeader("auth","5PE7vNMYVFJT/tgYo7TGuPO05lqMQx5w3BAJKDS567A73vM0TYFmWO5tP="); 
+0

Sie für diese Antwort suchen sind nicht folgen? http://stackoverflow.com/questions/7682514/android-http-post-request-to-iis-7-returns-bad-requestinvalid-header-name – Lubo

+0

@Lubo Ich habe kein Problem mit der Einstellung Inhaltstyp. Es funktioniert so, wie ich es jetzt mache. Das Problem ist jedoch mit dem benutzerdefinierten Header "Auth". – Thomas

+1

Wenn Sie den Wert von 'auth' fest codieren, funktioniert es, aber wenn Sie' strAuth' verwenden, ist das nicht? Was ist der Wert von 'strAuth'? – Andreas

Antwort

1
String strAuth = DoAESEncrypt("userid:pwd"); 
     String strContent = DoAESEncrypt("{\"Name\":Tester,\"Id\":\"123\",\"NickName\":null,\"IsLocked\":false}"); 

      HttpClient client = new DefaultHttpClient();   
      HttpPost post = new HttpPost("https://domainname/servicename"); 
      post.addHeader("auth",strAuth.replace("\n","").replace("\r",""); 
      post.addHeader("Content-Type", "application/json"); 
      StringEntity input = new StringEntity(strContent); 
      post.setEntity(input); 
      HttpResponse response = client.execute(post); 

Ersetzen Sie alle \ n und \ r aus dem verschlüsselten String, die Sie Header vorbei als

strAuth.replace("\n","").replace("\r","") 
+0

Arbeitete für mich !! – Mrinmoy

1

Aus irgendeinem Grund wurde die DoAESEncrypt Funktion einen Wagenrücklauf Hinzufügen „\ r \ n“, um den Chiffretext . Dies wurde entfernt und es hat gut funktioniert.

Verwandte Themen