2010-12-06 29 views
1

J'utilise un serveur mod_python, où index.py est conçu pour gérer les demandes entrantes.HTTP POST, curl et mod_python - Comment gérer une requête POST sans élément HTML FORM?

Dans le index.py, si je conçois quelque chose comme ça pour gérer la forme et obtenir les détails de la forme:

<form enctype="multipart/form-data" action="func" method="post"> 
<p>Input file:<input type="file" name="request"></p> 
<p><input type="submit" name="press" value="submit"></p> 

Et obtenir les détails de la forme comme celui-ci (note l'action « Fonction » ci-dessus)

def func(req): 
    message = [] 
    f = req.form.getfirst('request') 

Cela fonctionne parfaitement à partir du navigateur. Je peux télécharger un fichier et son contenu peut être récupéré à la fin du serveur.

Cependant, je veux envoyer des données via le POST de curl. Dans ce cas, j'ai pensé, l'élément <forme> sur le serveur n'est pas nécessaire pour gérer POST, si je peux obtenir les données POST de l'objet de demande lui-même.

Supposons que ma demande par boucle est comme ceci:

curl --data "request=data_i_am_posting" http://mymodpythonsite.com/path/ 

comment mon gestionnaire de requêtes mod_python être conçus de telle sorte que je reçois les données que je suis l'affichage. Dois-je utiliser le formulaire < >?

def index(req): 
    # What should I do here to get data_i_am_posting 

BTW, s'il vous plaît noter que je serveur HTTP ne sera pas accessible par navigateur à tous les clients (boucle, scripts) affichera les données et attendre la réponse qui sera non html.

Répondre

4

D'abord quelques notes:

  • On dirait que vous utilisez le Publisher Handler of mod_python. Cela fait beaucoup sous les couvertures pour mapper les URL aux fonctions Python.
  • Le serveur ne sait pas ou ne se soucie pas vraiment de l'obtention de ses données. Dans votre cas, le curl command is simply simulating a form POST request.
  • Par conséquent, vous pouvez gérer les demandes de boucle exactement les mêmes que les demandes de formulaire.
  • Vous ne voulez probablement pas nommer votre fonction "index" car cela pourrait ajouter une confusion inutile au mappage path-> de la fonction de publication puisque "index.py" est une partie implicite du chemin. Pas faux, juste déroutant.

Donc, pour votre commande curl, vous devriez être en mesure d'obtenir ce que vous voulez de cette fonction dans le module "index.py":

def path(req): 
    request_data = req.form.getfirst('request') 
    -
+0

Merci. C'est tout était nécessaire. Je pourrais même faire cela dans la méthode d'index. Quand j'avais fait un dir (req) initial sur index (req), je n'ai pas vu d'attribut de formulaire. Je ne suis pas sûr comment mod_python req obtient magiquement l'attribut de forme. –

+0

Il y a un autre problème auquel je suis confronté. Quand je fais curl --data "request = " http://mymodpythonsite.com/path/ le serveur le voit comme un xml invalide comme: value = something (essayé --data , --data-binary, --data-urlencode, sans résultat) –

+0

Rien ne saute sur moi immédiatement. Bien que cela semble être une opportunité pour une autre question SO :) – mjhm