POST-запрос не отправлен - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть небольшая клиентская программа Android-Java, которая отправляет основную информацию на сервер bottle-python методом POST.В первой версии кода сервер ничего не показывает.Тем не менее, во второй версии это работает, но я не могу понять, что делает эта дополнительная строка, потому что она имеет какое-либо отношение к публикации контента.Я очень признателен, если кто-нибудь поможет мне разобраться с этим (в коде сервера нет ничего плохого, поскольку я могу правильно отправлять запросы с запросами Python и моими браузерами).

Это первая версия кода клиента:

String url = "http://192.168.1.23:8080/";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
PrintStream myPusher = new PrintStream(os );
myPusher.print("param1=hey");

Вторая версия:

String url = "http://192.168.1.23:8080/";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
PrintStream myPusher = new PrintStream(os );
myPusher.print("param1=hey");
InputStream in= con.getInputStream(); //Nothing changed but only this additional line

Сервер Bottle (python):

@app.route('/', method="POST")
def hello():
    print("it works")
    name = request.forms.get("param1")
    print(name)
    return name

@app.route('/')
def hello():
    i=0
    print("it works")

run(app, host="192.168.1.23", port=8080)

С первым клиентским кодом сервер ничего не показывает.

Свторой сервер кодов показывает:

it works
hey
192.168.1.24 - - [31/Dec/2018 17:10:28] "POST / HTTP/1.1" 200 3

Что, как я и ожидал.

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

Ваш Java-код кажется неполным для отправки запроса.Я думаю, что используя этот код , вы можете заставить его работать на себя.

0 голосов
/ 31 декабря 2018

PrintStream является буферизованным типом, это означает, что вы должны добавить операцию очистки после каждого print() или использовать println() вместо.

0 голосов
/ 31 декабря 2018

С вашим первым фрагментом кода выходной поток все еще открыт.Таким образом, сервер не знает, получил ли он полный запрос.Вероятно, просто закрытие потока также будет работать.

Однако я бы хотя бы позвонил getResponseCode, чтобы увидеть результат запроса.

...