2015-09-12 2 views
0

Я пишу питон скрипт так:Как получить доступ к параметрам POST в веб-сервере python с помощью модуля web.py?

import web 
import commands 

urls = ('getprint', 'GetPrint', 'postprint', 'PostPrint') 

app = web.application(urls, globals()) 

class GetPrint: 
    def GET(self): 
    return "Hello, this is GetPrint function :D" 

class PostPrint: 
    def POST(self): 
    # I don't know how to access to post data!!! 
if __name__ == "__main__": app.run() 

Я хочу использовать этот скрипт в качестве веб-службы и называют это через PHP скрипт с другой машины. Мой PHP скрипт для вызова Python веб-службы, как это:

<?php ... 
    require('CallRest.inc.php'); 
    ... 
    $status = CallAPI('GET', "http://WEBSERVICE_MACHINE_IP:PORT/".$arg); 
    echo $status; 
    ... 
    $data = array("textbox1" => $_POST["textbox1"]); 
    CallAPI('POST', 'http://WEBSERVICE_MACHINE_IP:PORT/'.$arg, $data); 
... ?> 

И заголовочный файл «CallRest.inc.php» является:

<?php 
// Method: POST, PUT, GET etc 
// Data: array("param" => "value") ==> index.php?param=value 
function CallAPI($method, $url, $data = false) 
{ 
    $curl = curl_init(); 
    switch ($method) 
    { 
     case "POST": 
      curl_setopt($curl, CURLOPT_POST, 1); 
      if ($data) 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
      break; 
     case "PUT": 
      curl_setopt($curl, CURLOPT_PUT, 1); 
      break; 
     default: 
      if ($data) 
       $url = sprintf("%s?%s", $url, http_build_query($data)); 
    } 
    // Optional Authentication: 
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($curl, CURLOPT_USERPWD, "username:password"); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($curl); 
    curl_close($curl); 
    return $result; 
}  
?> 

Класс GetPrint работают корректно, но я не знать, как передать параметры сообщения в веб-службу python и как получить доступ к ним в класс PostPrint.

+0

Может быть, 'request.params' - это то, что вы ищете. Распечатайте это в своем 'post method'. Он напечатает MultiDict. –

+0

@ uri2x, большое спасибо. Я использовал web.input(). Этот метод возвращает класс 'Storage', и я могу получить доступ к моим данным POST в качестве словаря. Мой скрипт завершен: D –

ответ

1

Чтобы получить доступ к данным POST по вашему коду Python, вы должны указать сразу после def POST(self) такую ​​переменную, как data = web.input(). Затем вы можете получить доступ к полям, указанным here, например: data.param1, data.name и т. Д. Поэтому ваш код должен выглядеть следующим образом:

class PostPrint: 
    def POST(self): 
    data = web.input() 

    param1 = data.param1 
    name = data.name 
    ... 
Смежные вопросы