Android и CherryPy - PullRequest
       8

Android и CherryPy

0 голосов
/ 21 ноября 2018

Я занимаюсь разработкой приложения для Android, в котором мне нужно сделать HTTP-запрос POST для REST API, созданного с использованием cherrypy.

Вот Java-код приложения:

public String post(String host,int port,String path,String msg) throws IOException{
    URL url = new URL ("http",host,port,path);
    Log.e("track","sto per connettermi");
    URLConnection conn = url.openConnection();
    Log.e("track","connesso");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setAllowUserInteraction(true);
    conn.getOutputStream().write(msg.getBytes());
    conn.getOutputStream().close();
    StringBuilder sb = new StringBuilder();
    BufferedReader in = new BufferedReader(
            new InputStreamReader(
                    conn.getInputStream()
            )
    );
    String line;
    while ((line = in.readLine()) != null)
        sb.append(line);
    in.close();
    return sb.toString();
}

Это код Python для REST API:

def POST(self,*uri,**params):
    if uri[0] == 'userAuth':
        tempJson = json.loads(cherrypy.request.body.read())
        user_name = tempJson['user_name']
        pwd = tempJson['pwd']
        if user_name in self.users:
            return json.dumps({"user_id":str(self.users.index(user_name)),"result":True})
        return json.dumps({"result":"Wrong Credentials","success":False})

На сервере cherrypy, который я получаюследующая ошибка: ValueError: No JSON object could be decoded Проблема в том, что я отправляю данные через поток Java, и я не могу декодировать их в Python.Есть ли способ отправить данные напрямую в виде строки или способ декодировать их в Python?

решено Исправлено добавление строки: conn.setRequestProperty("Content-Type","application/json");

1 Ответ

0 голосов
/ 22 ноября 2018

Определите свой метод POST как:

@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def POST(self,*uri,**params):
    req = cherrypy.request
    if uri[0] == 'userAuth':
        user_name = req.json['user_name']
        pwd = req.json['pwd']
        if user_name in self.users:
            return {"user_id": str(self.users.index(user_name)), "result": True}
        return {"result": "Wrong Credentials","success": False}

Для получения дополнительной информации об инструментах json https://docs.cherrypy.org/en/latest/basics.html#dealing-with-json. Также на стороне андроида ... посмотрите на https://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android Скорее всего, вам нужно использовать HttpURLConnection и указать метод HTTP client.setRequestMethod(“POST”);

...