[英]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.