2017-08-16 1 views
2

Von HttpUrl.java:Warum kodiert OkHttp nicht das Prozentzeichen?

static final String FORM_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#&!$(),~"; 

Von FormBody.java

public Builder addEncoded(String name, String value) { 
     names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, true, false, true, true, charset)); 
     values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, true, false, true, true, charset)); 
     return this; 
    } 

hier Ein Nebeneffekt ist, dass wenn wir ein Anmeldeformular (Benutzername und Passwort) zu veröffentlichen, wenn das Passwort ein ‚%‘ enthält (Prozentzeichen), dann ist es nicht codiert und der Benutzer kann sich nicht einloggen. Warum wird dieses Zeichen nicht von OkHttp kodiert?

Als Referenz hier ist, wie wir das Formular erstellen (die Karte enthält zwei Strings, Benutzername und Passwort):

public RequestBody createEncodedFormBody(final Map<String, String> content) { 
     final FormBody.Builder builder = new FormBody.Builder(); 
     for (final Entry<String, String> contentEntry : content.entrySet()) { 
      builder.addEncoded(contentEntry.getKey(), contentEntry.getValue()); 
     } 
     return builder.build(); 
    } 

Antwort

1

Verwenden FormBody.Builder.add() statt addEncoded(). Die codierte Methode geht davon aus, dass Sie die Eingabe bereits codiert haben.

+1

Heilige Kuh Ich schäme mich, dass wir das nicht verstanden haben. Vielen Dank!!! –

+0

@EricKerwin gleiche Sache hier :) Ich habe es rückwärts verstanden –