java.io.IOException: authentification Reçues défi est null dans ICS 4.0.3
Je suis en train de fermeture de session à partir du serveur. Mais elle renvoie la valeur "0" code de réponse à cette exception. Je suis en utilisant le verbe GET pour ce faire.
LogCat
10-17 14:54:13.261: W/System.err(868): java.io.IOException: Received authentication challenge is null
10-17 14:54:13.284: W/System.err(868): at libcore.net.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:397)
10-17 14:54:13.284: W/System.err(868): at libcore.net.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:345)
10-17 14:54:13.304: W/System.err(868): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:276)
10-17 14:54:13.324: W/System.err(868): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:479)
10-17 14:54:13.324: W/System.err(868): at com.remote.synchronizer.haris.CustomHttpClient.executeGet(CustomHttpClient.java:131)
10-17 14:54:13.354: W/System.err(868): at com.remote.synchronizer.haris.OptionsActivity$1$3$1.run(OptionsActivity.java:87)
10-17 14:54:13.364: W/System.err(868): at android.os.Handler.handleCallback(Handler.java:605)
10-17 14:54:13.384: W/System.err(868): at android.os.Handler.dispatchMessage(Handler.java:92)
10-17 14:54:13.384: W/System.err(868): at android.os.Looper.loop(Looper.java:137)
10-17 14:54:13.404: W/System.err(868): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-17 14:54:13.424: W/System.err(868): at java.lang.reflect.Method.invokeNative(Native Method)
10-17 14:54:13.424: W/System.err(868): at java.lang.reflect.Method.invoke(Method.java:511)
10-17 14:54:13.454: W/System.err(868): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-17 14:54:13.474: W/System.err(868): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-17 14:54:13.474: W/System.err(868): at dalvik.system.NativeStart.main(Native Method)
10-17 14:54:13.484: E/HTTP Response(868): java.io.IOException: Received authentication challenge is null
CustomHttpClient.java
public class CustomHttpClient {
static HttpClient client = new DefaultHttpClient();
static HttpURLConnection connection = null;
public static int executePost(String url, String postParameters)
{
int response=0;
OutputStream output = null;
try
{
connection = (HttpURLConnection)new URL(url).openConnection();
System.setProperty("http.keepAlive", "false");
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
connection.connect();
output = connection.getOutputStream();
output.write(postParameters.getBytes("UTF-8"));
response=connection.getResponseCode();
}
catch(Exception e)
{
e.printStackTrace();
Log.e("HTTP Response", e.toString());
}
finally {
if(connection != null) {
// connection.disconnect();
if (output != null)
try { output.close(); }
catch (IOException logOrIgnore) {}
}
}
return response;
}
public static int executeGet(String url)
{
int response=0;
//HttpURLConnection connection = null;
try
{
connection = (HttpURLConnection) new URL(url).openConnection();
System.setProperty("http.keepAlive", "false");
//connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setDoInput(true);
connection.setRequestMethod("GET");
connection.connect();
response=connection.getResponseCode();
}
catch(Exception e)
{
e.printStackTrace();
Log.e("HTTP Response", e.toString());
}
finally {
if(connection != null) {
// connection.disconnect();
}
}
return response;
}
}
Avant cela, je suis en utilisant DefaultHTTPClient dans Gingerbird 2.3 de son travail à merveille, mais ICS DefaultHTTPClient ne fonctionne pas donc j'ai besoin d'utiliser HttpURLConnection. Verbe POST fonctionne bien.
- Veuillez voir ma réponse et +1/accepter si vous le souhaitez!
- vous avez probablement vu cela, mais il vaut le coup le partage stackoverflow.com/questions/11810447/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir le code de réponse après une exception si vous appelez .getResponseCode() une deuxième fois sur l'objet de connexion. C'est parce que la première fois que vous appelez .getResponseCode() un état interne est l'ensemble qui permet .getResponseCode() pour retourner, sans jeter une exception.
Exemple:
J'ai également répondu à cette question ici: https://stackoverflow.com/a/15972969/816017
HttpURLConnection.getResponseCode()
jettejava.io.IOException: Received authentication challenge is null
lorsqu'il rencontre malformé HTTP 401-tête. Recevez-vousWWW-Authenticate
etContent-Length
les en-têtes du serveur en plus deHTTP/1.1 401 Unauthorized
en-tête? Voir IOException: "authentification Reçues défi est nulle" (Apache Harmony/Android)Si vous ne pouvez pas apporter des modifications au serveur, vous pouvez intercepter cette exception (merci https://stackoverflow.com/a/10904318/262462)
Cette erreur se produit beause le serveur envoie un 401 (non autorisé), mais ne donne pas de "WWW-Authenticate" qui est un indice pour le client quoi faire ensuite. Le "WWW-Authenticate" en-Tête indique au client le type d'authentification est requis (soit De base ou Digest). Ce n'est généralement pas très utile dans la tête des clients http, mais c'est comment le standard est défini. L'erreur se produit parce que la lib tente d'analyser les "WWW-Authenticate" en-tête mais ne le peuvent pas.
Solutions possibles si vous pouvez modifier le serveur:
WWW-Authenticate: Basic realm="fake"
. Ce n'est qu'une simple solution de contournement n'est pas une solution, mais il doit le faire et le client http est satisfait.403
au lieu de401
. C'est de la sémantique n'est pas le même et, habituellement, lorsque vous travaillez avec connexion 401 est une réponse correcte ( voir ici pour une discussion détaillée ), mais assez proche.Solutions possibles si vous ne pouvez pas changer le serveur:
Comme @ErikZ a écrit dans son post vous pouvez utiliser un try&attraper
J'ai aussi posté ici: java.io.IOException : Aucune authentification n'défis trouvé