NSTask возвращает HTTP-заголовки

Я бегу /usr/bin/perl или же /usr/bin/php через NSTask и хотите получить заголовки HTTP программы. Я правильно отформатировал среду (Perl требует, чтобы env vars был префиксом HTTP_), но ни одна из задач не возвращает ничего, кроме необработанного вывода. Я просматривал документацию по NSTask и справочные страницы по php и perl и не видел способа форсировать вывод HTTP-заголовков.

Есть идеи?

РЕДАКТИРОВАТЬ: я понимаю, что это древний вопрос, но я просто заново открыл его и понял, что я должен доложить. Проблема заключалась в том, что я должен был использовать php-cli, и не php, Мне пришлось скачать и скомпилировать php-cli из источника, чтобы заставить это работать, как я ожидал. Как только я это сделал, это сработало как шарм.:)

3 ответа

Решение

Возможно, вам придется добавить к выводу HTTP-заголовок, созданный вами на основе необработанного вывода из вашего сценария perl или php.

Например, вы знаете, что необработанный вывод из сценария php будет иметь тип содержимого: text / html, и вы можете получить длину из самого вывода. По крайней мере, я думаю, что это то, что я сделал при реализации аналогичного решения.

Вы не можете просматривать или изменять среду другого процесса. Исключением является то, что вы можете изменить среду дочернего процесса, но только при создании этого процесса. Таким образом, вы можете настроить начальную среду вашего подпроцесса perl или php, но вы не можете прочитать, какая среда у него есть позже, и вы, конечно, не можете увидеть, какая среда у него была при выходе.

Вам нужно сделать так, чтобы скрипт Perl или PHP выводил свою среду в каком-то формате, и считывал это в процесс Cocoa через канал.

Сценарий печатает заголовки, когда вы запускаете его из терминала? Если это так, возможно, используя -[NSTask setStandard*:] (возможно, используя NSPipe) может помочь захватить вывод. Если нет, то возможно, что веб-сервер внедряет заголовки при обработке CGI.

Другие вопросы по тегам