我正在努力从Python(以192.168.2.20/Fetch/Fetch.py作为主机)的ip地址发送JSON数据到Android。我曾经在php中完成此操作,这非常简单,只需要做以下代码即可:
echo json_encode($thedata);
但是Python似乎很难做到这一点,我也不知道如何做到这一点,因为大多数教程都建议使用框架,因此网络似乎根本没有帮助。因此,如何在不使用FLASK的情况下在我的Android应用程序中包含python文件并获取JSON。
答案 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
来完成自己的工作,最好还是正确地做事从一开始就避免将来进行大量返工。使用能够为您处理样板内容的框架。