2016-03-17 4 views
1

У меня есть Угловая веб-сборка в приложении iOS и вы хотите, чтобы POST запрашивал до собственного слоя с некоторым JSON, который я могу использовать для создания некоторой собственной функциональности. Я использую старый UIWebView (потому что угловой), поэтому я использую NSURLProtocol для перехвата запроса. Это работает, и я могу сломаться в точке, в которой приходит запрос. Проблема в том, что я не могу увидеть JSON в свойстве данных в этот момент, потому что это не ответ. Запрос все еще находится в объекте конфигурации, но я понятия не имею, как это сделать.Как я могу получить данные из объекта конфигурации NSURLRequest

Мой угловой код для создания должности в настоящее время, как это:

var newdata = $.param({ 
      json: JSON.stringify({ 
       name: "Lee" 
      }) 
     }); 

     $http.post(url, newdata) 

и в моем NSURLProtocol классе я успешно перехватывать этот пост в этом методе, но свойство HTTPBody равна нулю:

override class func canInitWithRequest(request:NSURLRequest) -> Bool { 

     if (request.URL!.absoluteString as NSString).containsString("request_media_gallery") { 

      if(request.HTTPBody != nil){ 

       let data:NSData = request.HTTPBody! 
       print(data) 
      } 
      return true 
     } 
     return request.URL?.host == "file" 
    } 

Если я отлаживаю это в chrome, я получаю 405 из-за CORS, но я вижу, что мой объект запроса не имеет никаких данных, но имеет объект конфигурации. Вот лог консоли от Chrome:

console log

ответ

4

К тому времени запрос URL получает вниз к слою протокола, IIRC, то URL Загрузка системы дезинфицирует ее много способов. В частности, если запрос имеет HTTPBody объект, связанный с ним, он в основном делает это:

req.HTTPBodyStream = [NSInputStream inputStreamWithData:req.HTTPBody]; 
req.HTTPBody = nil; 

В результате, чтобы получить данные, вам необходимо прочитать из HTTPBodyStream, независимо от того, является ли запрос был первоначально созданный с помощью объекта NSData или потока тела.

+0

Итак, как мы читаем этот NSInputStream? Mine, кажется, говорит «нет байтов» – Jelle

+1

Раздражающе, байты фактически не становятся доступными до более позднего цикла цикла выполнения. Для чтения: 1. Установите себя как делегат потока. 2. Запланируйте его в цикле выполнения. 3. Откройте поток. 4. Внедрите доступные методы делегатов. 5. Сделайте свою работу после того, как она сообщит, что имеются доступные байты. – dgatwood

 Смежные вопросы

  • Нет связанных вопросов^_^