簡體   English   中英

如何在 Mod_Python 中通過 POST 或 GET 發送數據?

[英]How to send data via POST or GET in Mod_Python?

使用 JS,我發送 AJAX 發布請求。

 $.ajax(
        {method:"POST",
        url:"https://my/website/send_data.py",
        data:JSON.stringify(data),
        contentType: 'application/json;charset=UTF-8'

在我的 Apache2 mod_Python 服務器上,我希望我的 python 文件能夠訪問data 我怎樣才能做到這一點?

def index(req):
    # data = ??

PS:這里是如何重現問題。 創建testjson.html

<script type="text/javascript">
xhr = new XMLHttpRequest();
xhr.open("POST", "testjson.py");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function(res) { console.log(xhr.responseText); };
xhr.send(JSON.stringify({'foo': '0', 'bar': '1'}));
</script>

並創建包含以下內容的testjson.py

from mod_python import apache 

def index(req):
    req.content_type = "application/json"
    req.write("hello")
    data = req.read()
    return apache.OK

創建一個.htaccess包含:

AddHandler mod_python .py
PythonHandler mod_python.publisher

結果如下:

testjson.html:10 POST http://localhost/test_py/testjson.py 501(未實現)

在此處輸入圖片說明

正如 Grisha(mod_python 的作者)在私人通信中指出的,這就是為什么不支持application/json並輸出“HTTP 501 未實現”錯誤的原因:

https://github.com/grisha/mod_python/blob/master/lib/python/mod_python/util.py#L284

解決方案是修改它,或者使用常規的application/x-www-form-urlencoded編碼,或者使用mod_python.publisher處理程序以外的其他東西。

mod_pythonPythonHandler mod_python.publisher示例:

<script type="text/javascript">
var data = JSON.stringify([1, 2, 3, '&=test', "jkl", {'foo': 'bar'}]); // the data to send
xhr = new XMLHttpRequest();
xhr.open("POST", "testjson.py");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function(res) { console.log(xhr.responseText); };
xhr.send('data=' + encodeURIComponent(data));
</script>

服務器端:

import json
from mod_python import apache 

def index(req):
    data = json.loads(req.form['data'])
    x = data[-1]['foo']
    req.write("value: " + x)

輸出:

價值:酒吧

成功!

來自Mod_python 文檔

可以使用request.read()函數讀取客戶端數據,例如 POST 請求。

來自此處的 Mod Python 文檔。

Mod Python 文檔

在這里你可以做,例如獲取數據

def index(req):
    data = req.read()

附加鏈接: http : //vandermerwe.co.nz/?p=9

正如我所說,從新版本來看,它看起來像是一個配置問題。

首先,嘗試設置PythonPath指令。

其次, PythonHandler 應該是你的file ,即:

PythonHandler testjson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM