Как я могу открыть браузер Android с указанными параметрами POST?

В моем приложении мне нужно открыть ссылку в браузере Android. Эта страница может получать некоторые данные только через POST. Могу ли я добавить эти параметры (данные) в намерение, которое запускает браузер?

Вы знаете, возможно ли это? Если да, то не могли бы вы мне подсказать?


person Ungureanu Liviu    schedule 07.11.2010    source источник
comment
› Могу ли я добавить эти параметры (данные) в намерение запуска браузера? ПОЧТА? ПОЛУЧИТЬ? да.   -  person CommonsWare    schedule 08.11.2010
comment
Спасибо. Так что нет способа отправить некоторые данные через POST на страницу и открыть ее в браузере Android? Даже если я использую WebView?   -  person Ungureanu Liviu    schedule 08.11.2010
comment
Правильный. Так же, как вы не можете отправить некоторые данные через POST на страницу где-либо еще, используя простой URL-адрес (например, гиперссылку на веб-странице). Это не Android, это интернет.   -  person CommonsWare    schedule 08.11.2010
comment
Ты прав! Я буду искать другое решение. Спасибо!   -  person Ungureanu Liviu    schedule 08.11.2010
comment
@UngureanuLiviu, привет, я хотел бы поговорить с вами о добавлении параметров в запрос POST в Android.   -  person Pankaj Nimgade    schedule 14.04.2015


Ответы (4)


Используйте веб-просмотр:

WebView webview = new WebView(this);
setContentView(webview);
byte[] post = EncodingUtils.getBytes("postvariable=value&nextvar=value2", "BASE64");
webview.postUrl("http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php", post);
person Pete    schedule 04.04.2011
comment
как мне отправить полезную нагрузку json? - person user1796624; 16.04.2015

Намерения, отправляемые в браузер, могут содержать больше, чем просто URL-адрес. В более старых версиях Android можно было упаковать дополнительные данные POST в намерение, в более новых версиях эта возможность исчезла, но можно отправить дополнительные данные заголовка для GET (который может быть практически любым, что может быть представлено в виде строки) в доставленном намерении. в браузер.

person Chris Stratton    schedule 08.11.2010
comment
Конечно, то, что поддерживается, в конечном итоге зависит от того, какое приложение браузера получает намерение. - person Chris Stratton; 13.05.2015

Я считаю, что в вопросе есть небольшое заблуждение. Чего не хватает, так это цели, которая вам нужна POST вместо GET.

Если вы согласитесь, я сделаю несколько предположений, которые могут быть распространены в этом контексте:

  • Вам нужно скрыть фактические переменные из истории
  • Вам нужно некоторое взаимодействие с сервером, прежде чем пользователь получит контроль
  • Вы не можете контролировать сам сервер, и он использует (преднамеренно) запросы POST

Любой из этих вариантов или требований подразумевает некоторую дополнительную обработку, отличную от обычного варианта использования браузера (чтобы дать полный контроль над обработкой и взаимодействием). Кажется, что вы на самом деле запрашиваете связь между машинами (M2M) с возможным выводом HTML.

Если это окажется правдой, то правильным выбором будет использование OKHttp, HTTPURLConnection, HTTP-клиента Apache и т. д. Вместо того, чтобы вызывать браузер через Intent, у которого почти нет возможностей обмена сообщениями (просто запустите и забудьте - в случае http:...). На самом деле это требует некоторого анализа потока данных (может помочь диаграмма последовательности), а затем преобразование этого процесса в M2M или вспомогательное M2M-взаимодействие.

Если сервер, с которым вы взаимодействуете, является вашим собственным, то почему бы вам не создать REST/JSON/SOAP или другой M2M API для выполнения удаленных вызовов методов (RPC/RMI/...). Это не так сложно, как может показаться (например: http://coreymaynard.com/blog/creating-a-restful-api-with-php/ или https://docs.phalconphp.com/pt/latest/reference/tutorial-rest.html)

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

Примечание. Использование приложения для взаимодействия со сторонними серверами может иметь некоторые юридические последствия. На самом деле этот сервер может не разрешать другое использование, кроме как через браузер (обнаружение человека = капча, обнаружение агента пользователя). В таком случае вам необходимо договориться с владельцем сервера.

person pxlinux    schedule 12.06.2015
comment
Основная причина, по которой вы можете использовать POST, заключается в том, что запрос не является идемпотентным, но что-то изменяет. - person Flimm; 21.07.2016
comment
Хотя начало интересное, концовка почти вводит в заблуждение. Мы можем публиковать некоторые конфиденциальные данные, такие как логин, пароль, имя, телефон, токен и т. д., которые не должны отображаться в истории и представляют угрозу безопасности. Но мы должны пройти их, чтобы авторизоваться на веб-странице из авторизованного приложения Android. - person CoolMind; 25.02.2020

person    schedule
comment
Я пробовал это, и это не работает. Хром открывается, но ничего не происходит. - person Highriser; 26.03.2019