如何将数据从Python发送到Android App

时间:2018-09-08 10:54:01

标签: php android python json

我正在努力从Python(以192.168.2.20/Fetch/Fetch.py​​作为主机)的ip地址发送JSON数据到Android。我曾经在php中完成此操作,这非常简单,只需要做以下代码即可:

echo json_encode($thedata);

但是Python似乎很难做到这一点,我也不知道如何做到这一点,因为大多数教程都建议使用框架,因此网络似乎根本没有帮助。因此,如何在不使用FLASK的情况下在我的Android应用程序中包含python文件并获取JSON。

1 个答案:

答案 0 :(得分:2)

如果您正在做有用的事情,除了将python作为android应用程序后端使用之外,您应该开始寻找标准的python框架来处理HTTP服务器操作,例如django或flask。

话虽这么说,但我有一个小存根用作我的传出请求的测试服务器,它可以回答您的问题。您可以通过对其进行修改来设置任何状态代码,标题或响应正文:

#!/usr/bin/env python
# Reflects the requests with dummy responses from HTTP methods GET, POST, PUT, and DELETE
# Written by Tushar Dwivedi (2017)

import json
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from optparse import OptionParser

class RequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        request_path = self.path

        print("\n----- Request Start ----->\n")
        print("request_path :", request_path)
        print("self.headers :", self.headers)
        print("<----- Request End -----\n")

        self.send_response(200)
        self.send_header("Set-Cookie", "foo=bar")
        self.end_headers()
        self.wfile.write(json.dumps({'hello': 'world', 'received': 'ok'}))

    def do_POST(self):
        request_path = self.path

        # print("\n----- Request Start ----->\n")
        print("request_path : %s", request_path)

        request_headers = self.headers
        content_length = request_headers.getheaders('content-length')
        length = int(content_length[0]) if content_length else 0

        # print("length :", length)

        print("request_headers : %s" % request_headers)
        print("content : %s" % self.rfile.read(length))
        # print("<----- Request End -----\n")

        self.send_response(200)
        self.send_header("Set-Cookie", "foo=bar")
        self.end_headers()
        self.wfile.write(json.dumps({'hello': 'world', 'received': 'ok'}))

    do_PUT = do_POST
    do_DELETE = do_GET


def main():
    port = 8082
    print('Listening on localhost:%s' % port)
    server = HTTPServer(('', port), RequestHandler)
    server.serve_forever()


if __name__ == "__main__":
    parser = OptionParser()
    parser.usage = ("Creates an http-server that will echo out any GET or POST parameters, and respond with dummy data\n"
                    "Run:\n\n")
    (options, args) = parser.parse_args()

    main()

它将立即执行您要尝试的操作。但是请记住,我只是将其用作虚拟存根。因此,即使您只是在探索,并且涉及一个Android应用程序,并且您甚至需要在上述代码中添加5-6个if else来完成自己的工作,最好还是正确地做事从一开始就避免将来进行大量返工。使用能够为您处理样板内容的框架。