Как получить и вернуть строку в webapp2 с Android? - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь получить строку на моем сервере webapp2.Предполагается, что устройство Android отправляет на сервер строку name, затем сервер возвращается к телефону "your name is: " + name.

. Сервер возвращается только на Android "your name is: ", поскольку строка name выглядитбыть нулевым на стороне сервера.Я не уверен, если проблема на Android или на стороне сервера.

Мой код выглядит следующим образом:

ANDROID.java

Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                try  {
                    String name = "Jay";
                    String serverURL = "http://myapp.appspot.com";
                    URL url = new URL(serverURL);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    try{
                        httpURLConnection.setReadTimeout(15000);
                        httpURLConnection.setConnectTimeout(15000);
                        httpURLConnection.setRequestMethod("POST");
                        httpURLConnection.setDoOutput(true);
                        httpURLConnection.setDoInput(true);

                        OutputStream outputStream = new BufferedOutputStream(httpURLConnection.getOutputStream());
                        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                        String post_data = URLEncoder.encode(name,"UTF-8");
                        writer.write(post_data);
                        writer.flush();
                        writer.close();
                        outputStream.close();

                        InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
                        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                        String result="";
                        String line="";
                        while((line = reader.readLine())!= null)
                            result += line;
                        reader.close();
                        inputStream.close();

                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } finally {
                        httpURLConnection.disconnect();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        thread.start();

SERVER.py

import webapp2


class MainHandler(webapp2.RequestHandler):

    def post(self):
        name = self.request.get('content')
        self.response.out.write("Your name is: " + name)

    def get(self):
        self.response.write("Hello World")


app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

1 Ответ

0 голосов
/ 05 июня 2018

Ваш оператор name = self.request.get('content'), скорее всего, не будет делать то, что вы ожидаете.

Поскольку данные сообщения отправляются в теле сообщения, вы, вероятно, захотите посмотреть на self.request.body вместо этого (яя не пользователь Java, я не могу точно сказать, как ваши данные организованы внутри тела).

С webapp2 Запрос данных :

POST-данные

URL-адреса переменных, закодированные в телезапроса (обычно форма POST, отправляемая с использованием типа носителя application/x-www-form-urlencoded) доступна в request.POST.Это также MultiDict , к которому можно получить доступ так же, как и .GET.Примеры:

request = Request.blank('/')
request.method = 'POST'
request.body = 'check=a&check=b&name=Bob'

# The whole MultiDict:
# POST([('check', 'a'), ('check', 'b'), ('name', 'Bob')])
post_values = request.POST

# The last value for a key: 'b'
check_value = request.POST['check']

# All values for a key: ['a', 'b']
check_values = request.POST.getall('check')

# An iterable with all items in the MultiDict:
# [('check', 'a'), ('check', 'b'), ('name', 'Bob')]
request.POST.items()

Как и GET, имя POST несколько вводит в заблуждение, но имеет исторические причины: они также доступны, когда используется HTTP-метод PUT, а не только POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...