Почему кодировка параметров Alamofire заключена в скобки?

При использовании Alamofire

Возникла проблема при доставке параметров с помощью GET!
  • При передаче параметров скобки автоматически кодируются, и вам необходимо передать на сервер незакодированные значения.

Кто-нибудь может мне помочь?

   
     let url = "\(urlAIString)/Url-Space/position=[\(userLocation)]"
     AF.request(url,method: .get){
            ....
     }

Я хочу, чтобы скобки доставлялись на сервер без кодирования. Однако я испытываю неудобства, поскольку скобки закодированы в base64 и доставляются


52
1

Ответ:

Решено

Я хочу, чтобы скобки доставлялись на сервер без кодирования.

Это не URL-адрес, поэтому используемый вами протокол не является HTTP. Возвращаясь к RFC 1738, спецификация ясна:

Таким образом, только буквенно-цифровые символы, специальные символы "$-_.+!*'()," и могут использоваться зарезервированные символы, используемые в своих зарезервированных целях. незакодированный в URL-адресе.

Хотя вы (и служба, с которой вы работаете) можете определить некоторый протокол, отличный от HTTP, который очень похож на HTTP, но также поддерживает GET-подобные запросы, которые не являются URL-адресами, это не протокол, который поддерживает URLSession (на который опирается Almofire). . Вам предстоит создать собственный сетевой транспорт для взаимодействия с этим сервисом. Как правило, вам придется построить это поверх чего-то вроде структуры Network. Обычно это непростая работа, поэтому обычно проще заставить вашу службу использовать стандартный протокол, такой как HTTP, и правильно закодированные URL-адреса, а не изобретать собственный протокол, подобный тому, который вы описываете.

Если вы создаете собственный протокол для связи с этим сервисом, посмотрите NWProtocolTLS . Если ваш сервис очень похож на HTTP/1.0 и вы не используете никаких дополнительных функций, не так уж сложно построить его с нуля поверх TLS-соединения . (TLS требует много работы, поэтому позвольте системе сделать это за вас.) Простой HTTP можно написать и проанализировать вручную.

Для интеграции этого в Alamofire потребуется URLProtocol, чтобы взять на себя транспортный уровень. Это не тонна кода, но его довольно сложно настроить. Если вы создаете для этого сетевую службу и у вас возникли проблемы с URLProtocol, задайте более конкретный вопрос по этому поводу, когда доберетесь туда.

Вместо этого я рекомендую исправить ваш сервер. Обычно это проще.