Я занимаюсь разработкой приложения для 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");