-1

我有一個奇怪的行爲與android-7.0-nougat(P8 Lite 2017)。以前的所有版本都沒有問題。Android Nougat:奇怪的行爲HttpURLConnection

爲了控制iTunes,我通過HttpURLConnection發送消息。

我想知道爲什麼控件不能用於某些功能。 我通過Wireshark查看連接。

例子: (如何與Android < 7個工作)要打開相冊的內容我要送下到iTunes:

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')

什麼的Android 7做的:

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)

你可以看到,只有'改爲%27

這裏代碼:(重要部件)

 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()); 

在調試器中%27是不可見的所有時間。 只有在connection.getResponseCode()之後,我才能在Wireshark上看到這一點。

+0

考慮到'''是一個保留的URL字符,它應該是百分比編碼:https://en.wikipedia.org/wiki/Percent-編碼。 – CommonsWare

+0

告訴這個蘋果!要控制iTunes,我有!發送它。 – Erdal

+0

我沒有與Apple交易。顯然,你這樣做。所以,*你*告訴他們他們的URL系統已損壞,需要修復。 – CommonsWare

回答