J'ai un comportement étrange avec android-7.0-nougat (P8 Lite 2017). Avec toutes les versions précédentes, il n'y avait pas de problème.Android Nougat: Comportement étrange de HttpURLConnection
Pour conrol iTunes, j'envoie des messages via HttpURLConnection
. Je me demandais pourquoi le contrôle ne fonctionne pas pour certaines fonctionnalités. Je regarde via Wireshark à la connexion.
Exemple: (Comment ça fonctionne avec Android < 7) Pour ouvrir le contenu d'un album que je dois envoyer à iTunes: la suite
http://192.168.111.198:3689/databases/78/...&type=music&sort=album&query= (('com.apple.itunes.mediakind: 1 », 'com.apple.itunes.mediakind: 32') + 'daap.songalbumid: 11777812807525111312')
Qu'est-ce que Android 7 fait:
http://192.168.111.198:3689/databases/78/...&type=music&sort=album&query=((%27com.apple.itunes.mediakind:1%27,%27com.apple.itunes.mediakind:32%27)+ % 27daap.songalbumid: 11777812807525111312% 27)
Vous pouvez voir que seul '
changé à %27
.
ici pour code: (parties importantes)
String temp = String
.format(Locale.US,
"%s/databases/%d/containers/%d/items?session-id=%s&meta=dmap.itemname,dmap.itemid,daap.songvotecount,daap.songyear,daap.songgenre,daap.songartist,daap.songalbum,daap.songtime,daap.songuserrating,daap.songtracknumber,dmap.containeritemid&type=music&sort=album&query=(('com.apple.itunes.mediakind:1','com.apple.itunes.mediakind:32')+'daap.songalbumid:%s')",
session.getRequestBase(), session.databaseId, session.libraryId, session.sessionId, albumid);
byte[] raw = RequestHelper.request(temp, false, 10000);
public static byte[] request(String remoteUrl, boolean keepalive, int timeout) throws Exception {
byte[] buffer = new byte[1024];
URL url = new URL(remoteUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setAllowUserInteraction(false);
connection.setRequestProperty("Viewer-Only-Client", "1");
connection.setRequestProperty("Client-Daap-Version", "3.11");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
if (!keepalive) {
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
} else {
connection.setReadTimeout(0);
}
connection.connect();
if (connection.getResponseCode() >= HttpURLConnection.HTTP_UNAUTHORIZED)
throw new Exception("HTTP Error Response Code: " + connection.getResponseCode());
Tous les temps dans le débogueur le %27
n'est pas visible. Seulement après connection.getResponseCode()
je le vois sur Wireshark.
Considérant que ' '' est un caractère d'URL réservé, il doit être codé pour cent-: https://en.wikipedia.org/wiki/Percent- codage. – CommonsWare
Dites-le à Apple! Pour contrôler iTunes j'ai! pour l'envoyer. – Erdal
Je n'ai aucune relation avec Apple. Apparemment, vous faites. Donc, * vous * leur dites que leur système d'URL est cassé et doit être réparé. – CommonsWare