簡體   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