【问题标题】:How to send JSON to my python script?如何将 JSON 发送到我的 python 脚本?
【发布时间】:2014-09-11 13:01:13
【问题描述】:

目前我正在使用此函数从 chrome 扩展发送我的 JSON。这是来自 javascript 的客户端代码发送数据。

function callPython(){
    var url  = 'http://AWS_IPNUMBER/';
    var data = {'bob':'foo','paul':'dog'};
    $.ajax({
        url: url,
        type: 'POST',
        contentType:'application/json',
        data: JSON.stringify(data),
        dataType:'json',
        success: function(data){
            var jsonObj = $.parseJSON(data);
            alert(jsonObj.encPassword);
        },
        failure: function(errorMsg) {
            alert(errorMsg);
        }
    });
}

这是 Python 的服务器代码:

s = socket()
s.bind(('', 80))
s.listen(4)
ns, na = s.accept()

while True:
    try:
        data = ns.recv(8192)
    except:
        ns.close()
        s.close()
        break

    data = json.loads(data)
    print data

问题是虽然它正在监听,但datadata = ns.recv(8192) 处是空的。然后data = json.loads(data) 不起作用,因为data 是空的。为什么是这样?我认为这可能是我在 AWS 上的安全组的问题,但如果我转到 http://AWS_IPNUMBER/,我会在运行 python 脚本时从浏览器获取标题。

【问题讨论】:

    标签: javascript python ajax json


    【解决方案1】:

    如果使用像 tornadodjango 这样的好框架,您可能会获得更好的运气。

    我这样说是因为在你的代码中你试图用 json.loads 解析一个 http POST。 HTTP 没那么简单。在到达正文之前,您需要处理请求和标头,这可以分布在多个数据包中。当您可以从完善的项目中设置符合标准的服务器时,为什么还要尝试重新发明轮子。

    【讨论】:

    • 这种“简单”的事情是否需要这样做(也许它不像我想的那么简单)。 chrome 扩展是用户填写表格,将数据发送给我,然后将其保存在数据库中(我不需要发回任何内容)。
    【解决方案2】:

    $.ajax 函数将放入的数据是一个完整的 HTTP 请求,json.loads() 不会理解。在这种情况下,您需要实例化一个 HTTP 服务器,该服务器将处理 HTTP 请求,然后使用 json.loads() 处理 HTTP 负载。

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 2011-05-17
      • 1970-01-01
      • 2012-04-26
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多