Как открыть URL-адрес с параметрами POST через внешний браузер в android [duplicate]

Существует еще одна статья о StackOverflow, которая похожа на ваш сценарий, который может быть полезен: .htaccess перенаправляет с помощью фрагмента

Я не вижу права сервера теперь так не могу проверить это, но, возможно, связанная статья прольет некоторый свет на вещи в любом направлении.

22
задан HitOdessit 13 May 2015 в 09:44
поделиться

4 ответа

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

3
ответ дан Chris Stratton 17 August 2018 в 09:10
поделиться
  • 1
    Конечно, то, что поддерживается, в конечном итоге зависит от того, какое приложение браузера получает намерение. – Chris Stratton 13 May 2015 в 16:08
try{
        String finalUrl = "javascript:" +
                "var to = 'http://the_link_you_want_to_open';" +
                "var p = {param1:'"+your_param+"',param2:'"+your_param+"'};" +
                "var myForm = document.createElement('form');" +
                "myForm.method='post' ;" +
                "myForm.action = to;" +
                "for (var k in p) {" +
                "var myInput = document.createElement('input') ;" +
                "myInput.setAttribute('type', 'text');" +
                "myInput.setAttribute('name', k) ;" +
                "myInput.setAttribute('value', p[k]);" +
                "myForm.appendChild(myInput) ;" +
                "}" +
                "document.body.appendChild(myForm) ;" +
                "myForm.submit() ;" +
                "document.body.removeChild(myForm) ;";


        Uri uriUrl = Uri.parse(finalUrl);
        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
        PackageManager packageManager = this.getPackageManager();
        browserIntent.setData(uriUrl);
        List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
        for (ResolveInfo resolveInfo : list) {
            String activityName = resolveInfo.activityInfo.name;
            if (activityName.contains("BrowserActivity")) {
                browserIntent =
                        packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
                ComponentName comp =
                        new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
                browserIntent.setAction(Intent.ACTION_VIEW);
                browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
                browserIntent.setComponent(comp);
                browserIntent.setData(uriUrl);
            }
        }

        this.startActivity(browserIntent);

    }catch (Exception e){
        e.printStackTrace();
        txtHeader.setText(e.toString());
    }
4
ответ дан Mohammad Hadi 17 August 2018 в 09:10
поделиться

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

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);
11
ответ дан Pete 17 August 2018 в 09:10
поделиться
  • 1
    как я могу отправить полезную нагрузку json? – user1796624 16 April 2015 в 15:44

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

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

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

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

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

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

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

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

0
ответ дан pxlinux 17 August 2018 в 09:10
поделиться
  • 1
    Основная причина, по которой вы можете использовать POST , - это когда запрос не является идемпотентным, но что-то меняет. – Flimm 21 July 2016 в 14:29
Другие вопросы по тегам:

Похожие вопросы: