К сожалению, похоже, что запросы схем http:
и https:
обрабатываются в Foundation Framework несколько иначе, чем другие (включая пользовательские) схемы.Очевидно, что HTTPBody
и HTTPBodyStream
вызовы соответствующих NSURLRequest
всегда возвращают nil
для прежних.Это решено уже перед вызовом [NSURLProtocol canInitWithRequest]
, поэтому пользовательская реализация NSURLProtocol
никак не может повлиять на это (слишком поздно).
Кажется, что для http:
используется другой класс NSURLRequest
https:
чем «по умолчанию».По умолчанию реализация этого класса GnuStep возвращает всегда nil
из вызовов HTTPBody
и HTTPBodyStream
.Поэтому конкретные реализации (например, одна под PhoneGap, скорее всего, часть Foundation Framework) выбирают тип NSURLRequest
класса, основываясь на схеме, предварительно согласовав эту с NSURLProtocol
.Для пользовательских схем вы получаете NSURLRequest
, который возвращает nil
как для HTTPBody
, так и HTTPBodyStream
, что эффективно отключает использование метода POST (и других методов с телом) в обработчике пользовательских схем URI.
Может бытьесть способ повлиять на решение о том, какой класс NSURLRequest
фактически используется, но в настоящее время он мне неизвестен.
В качестве обходного пути вы все еще можете использовать схему http:
или https:
и принять решение в[NSURLProtocol canInitWithRequest]
на основе других критериев (например, имя хоста).