繁体   English   中英

获取 Python 以接受 POST / GET 请求

[英]Get Python to accept POST / GET requests

我有一个 PHP 页面和一个 Python 程序。 Python 程序进行内部 API 调用以获取需要在 PHP 页面上显示的信息。

Python 程序设置为接受一个参数,并使用该参数处理 API 调用。 例如myPythonProgram 12345 - 获取与帐户 12345 相关的信息。

我想通过 Ajax 从我的 PHP 页面调用它,但是如果我按照它应该调用的方式调用程序,我会得到一个 404(程序和参数之间有一个空格)。 我已经更改了 Python 脚本以接受请求(我认为),但是当我这样做时,呈现的是 Python 代码而不是结果。 以下失败:

$.ajax({
    type: 'POST',
    url: "myPythonProgram",
    data: { id: '12345' },
    success: function(response) {
        // Stuff
    },
    fail: function() {
       alert('Error');
    },
    complete: function() {
        // Stuff
    }
});

我想也许我可以通过shell_exec()调用另一个 PHP 页面来执行 Python 程序,但似乎该页面在 Python 程序完成其请求之前呈现。 就像是:

$.ajax({
   type: 'POST',
   url: "callPy.php",
   data: { id: '12345' },
   success: function(response) {
       // Stuff
   },
   ....
});

callPy.php 是:

<?php

$data = $_REQUEST['data'];

if (isset($data) && $data['id'] != NULL) {
    $info = shell_exec("myPythonProgram " . $data['id']);
    print_r(json_encode($info));
}

?>

如果我要在 shell 中运行这个确切的命令myPythonProgram 12345 ,它会起作用。 如果我修改 callPy.php 以硬编码 id,然后在 shell 中调用php callPy.php ,它就可以工作。 但是在浏览器中调用它会呈现 null。

如何让 python 接受 POST 或 GET 请求,或者让 PHP 在呈现页面之前等待 Python 程序完成?

这是通过更改 API 调用所需文件的权限来解决的。

首先,我检查了 Web 浏览器使用的是哪个用户: ps aux | egrep '(apache|httpd)' ps aux | egrep '(apache|httpd)' ,这告诉我它是 'apache'。 接下来,我尝试以该用户身份运行 python 程序: sudo -u apache ./myPythonProgram 12345 这会导致 API 调用所需的证书出错。

使用shell_exec() ,PHP 将等待进程完成。 因此,更改该证书的权限使我能够以apache用户身份运行该程序,并且能够达到预期的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM