Android应用通过POST将数据上传到python服务器

1 投票
1 回答
4152 浏览
提问于 2025-04-15 19:42

我已经成功地把这个从安卓移植到了谷歌应用引擎上的Java HttpServlet,但我想用Python来做服务器端。对Python我还是个新手,有人做过这个吗?我已经把留言簿的例子搞定了,但就是无法从我的安卓应用发送帖子到服务器。

我还想给客户端返回一个字符串,比如“成功”。

如果能有人指导一下我就太好了。

谢谢

***客户端Java:

URL url = new URL(Const.SERVER_NAME);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
    connection.getOutputStream()
);
out.write("content=12345");
out.close();

***服务器端Python:

class Upload(webapp.RequestHandler):
    def post(self):
        greeting.content = self.request.get('content') 
        greeting.put()

***服务器端Java(可用)

public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException
{

    try {
        String instring = request.getParameter("content")

        // set the response code and write the response data
        response.setStatus(HttpServletResponse.SC_OK);
        OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream());

        writer.write("Success");
        writer.flush();
        writer.close();
    } catch (IOException e) {
        try{
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().print(e.getMessage());
            response.getWriter().close();
        } catch (IOException ioe) {
        }
    } 

1 个回答

4

我知道这已经过了很长时间。但我解决了这个问题,所以我来分享一下我的解决方案。

这是安卓的代码:

        url = new URL(SERVER_URL);
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);

        OutputStreamWriter out = new OutputStreamWriter(
                                  connection.getOutputStream());

        String post_string;
        post_string = "deviceID="+tm.getDeviceId().toString();

        // send post string to server
        out.write(post_string);
        out.close();

        //grab a return string from server
        BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                    connection.getInputStream()));

        Toast.makeText(context, in.readLine(), Toast.LENGTH_SHORT).show();

这是使用Django和GAE的Python服务器端代码:

def upload(request):
    if request.method == 'POST':
        deviceID = measurement.deviceID = str(request.POST['deviceID'])
        return HttpResponse('Success!')
    else:
        return HttpResponse('Invalid Data')

撰写回答