Мне кажется, есть ошибка в реализации Android HttpURLConnection, когда заголовки ответа передаются этому методу вместо заголовков запроса.
Я решил эту проблему в своем коде, как показано ниже, хотя я не обращался к Google за более подробной информацией об ошибке в Android, но я вполне уверен, что реализация Android для httpurlconnection имеет некоторую проблему, как вы можете видеть, что она работает на Android-андроид:
В основном я исправил это, передав VirenRequestHeadersMap вместо передачи URLConnection # getRequestProperies (), чтобы соответствовать значениям, передаваемым из put (...).
@Override
public CacheRequest put(URI uri, URLConnection connection)
throws IOException {
MyPrivateContext context = <>;
context.setConnection(connection);
//...
}
@Override
public CacheResponse get(URI arg0, String arg1,
Map<String, List<String>> arg2) throws IOException {
System.out.println(arg2);
MyPrivateContext context = <>;
URLConnection connection = context.getConnection();
arg2 = new VirenRequestHeadersMap(connection);
//...
}
А вот и весь класс VirenRequestHeadersMap, если вам интересно, как он выглядит:
class VirenRequestHeadersMap implements Map<String, List<String>> {
private final URLConnection mConnection;
public VirenRequestHeadersMap(URLConnection connection) {
mConnection = connection;
}
public void clear() {
throw new UnsupportedOperationException();
}
public boolean containsKey(Object key) {
if (key instanceof String) {
String field = (String) key;
return mConnection.getRequestProperty(field) != null;
} else {
return false;
}
}
public boolean containsValue(Object value) {
throw new UnsupportedOperationException();
}
public Set<Entry<String, List<String>>> entrySet() {
throw new UnsupportedOperationException();
}
public List<String> get(Object key) {
if (key instanceof String) {
String field = (String) key;
String value = mConnection.getRequestProperty(field);
return value != null ? Collections.singletonList(value) : null;
} else {
return null;
}
}
public boolean isEmpty() {
throw new UnsupportedOperationException();
}
public Set<String> keySet() {
throw new UnsupportedOperationException();
}
public List<String> put(String key, List<String> value) {
throw new UnsupportedOperationException();
}
public void putAll(Map<? extends String, ? extends List<String>> value) {
throw new UnsupportedOperationException();
}
public List<String> remove(Object key) {
throw new UnsupportedOperationException();
}
public int size() {
throw new UnsupportedOperationException();
}
public Collection<List<String>> values() {
throw new UnsupportedOperationException();
}
}