【问题标题】:How to access POST parameters into python web server using web.py module?如何使用 web.py 模块将 POST 参数访问到 python Web 服务器?
【发布时间】:2015-09-12 13:58:40
【问题描述】:

我写了一个这样的python脚本:

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()

我想将此脚本用作 Web 服务,并通过另一台机器上的 php 脚本调用它。我调用python web服务的php脚本是这样的:

<?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 类工作正常,但我不知道如何将 post 参数传递给 python web 服务以及如何将它们访问到类PostPrint

【问题讨论】:

  • 可能是 request.params 是您正在寻找的。将此打印在您的post method 中。它会打印一个 MultiDict。
  • @uri2x,非常感谢。我使用了 web.input()。此方法返回一个Storage 类,我可以将我的 POST 数据作为字典访问。我的脚本完成了:D

标签: php python web.py post-parameter


【解决方案1】:

要访问 Python 代码中的 POST 数据,您应该在 def POST(self) 之后定义一个变量,例如 data = web.input()。然后可以访问here所示的字段,例如:data.param1data.name等。所以你的代码应该如下所示:

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

     param1 = data.param1
     name = data.name
     ...

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多