2009-09-22 7 views
2

Je cours /usr/bin/perl ou /usr/bin/php via un NSTask et je souhaite récupérer les en-têtes HTTP du programme. J'ai correctement formaté l'environnement (Perl requiert que les variables d'environnement soient précédées du préfixe HTTP_), mais aucune de ces tâches ne renvoie autre chose que la sortie brute. J'ai parcouru la documentation sur NSTask et les pages de manuel pour php et perl, et je n'ai vu aucun moyen de forcer la sortie des en-têtes HTTP.NSTask renvoyant les en-têtes HTTP

Des idées?

EDIT: Je sais que c'est une question ancienne, mais je redécouvert et réalisé que je devrais faire rapport. Le problème était que j'aurais dû utiliser php-cli, et non php. J'ai dû télécharger et compiler php-cli de la source pour que cela fonctionne comme je m'y attendais. Une fois que je l'ai fait, cependant, cela a fonctionné comme un charme. :)

Répondre

3

Vous devrez peut-être préfixer votre sortie avec l'en-tête HTTP, construit par vous en fonction de la sortie brute de votre script perl ou php. Par exemple, vous savez que la sortie brute d'un script php est de type content: text/html, et vous pouvez obtenir la longueur à partir de la sortie elle-même. Au moins, je pense que c'est ce que j'ai fait lors de la mise en œuvre d'une solution similaire.

1

Vous ne pouvez pas afficher ou modifier l'environnement d'un autre processus. L'exception est que vous pouvez modifier l'environnement d'un processus enfant, mais uniquement lorsque vous créez ce processus. Ainsi, vous pouvez configurer l'environnement initial de votre sous-processus perl ou php, mais vous ne pouvez pas lire l'environnement dont il dispose plus tard, et vous ne pouvez certainement pas voir l'environnement dans lequel il se trouvait à sa sortie.

Vous devez faire en sorte que le script Perl ou PHP affiche son environnement dans un format quelconque, et le lire dans votre processus Cocoa via un canal.

+0

Oui, je peux configurer l'environnement initial ('- [NSTask setEnvironment:]'), mais php et perl (et d'autres programmes CGI) doivent avoir un moyen de sortir les en-têtes HTTP, sinon comment pourraient-ils être utilisés? programmes avec Apache et d'autres serveurs web? –

+1

Ils écrivent les en-têtes HTTP sur leur sortie standard, au format d'en-tête HTTP. –

0

Le script imprime-t-il les en-têtes lorsque vous l'exécutez depuis Terminal? Si oui, peut-être en utilisant -[NSTask setStandard*:] (peut-être en utilisant NSPipe) peut aider à capturer la sortie. Sinon, il est possible que le serveur Web injecte les en-têtes lors du traitement du CGI.

+0

Le script n'imprime pas les en-têtes lorsqu'il est exécuté depuis le terminal. Je pense que je devrais faire ce que @alesplin a suggéré, malheureusement ... –

Questions connexes