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