Использование WebView setHttpAuthUsernamePassword?

Я пытаюсь сделать базовую аутентификацию для просмотра защищенного URL. Я хочу получить доступ к защищенному URL-адресу, который выглядит так:

http://api.test.com/userinfo/vid?=1234 

Поэтому я делаю следующее с помощью WebView:

 mWebView.setHttpAuthUsernamePassword("api.test.com", "", "[email protected]", "mypassword"); mWebView.loadUrl("http://api.test.com/userinfo/user?uid=53461"); 

но аутентификация не работает, я просто получаю страницу с ошибкой вывода. Я правильно использую метод WebView здесь?

Обновление: попытка с завихрением:

 curl -u [email protected]:mypassword http://api.test.com/userinfo/user?uid=53461 

и он отлично отображает страницу. Я пробовал каждую комбинацию параметра хоста, владельцы api не знают, что я имею в виду под «королевством» (и я тоже), – какую информацию я могу дать им, чтобы помочь этому?

благодаря

Другой вариант – использовать WebViewClient;

 webview.setWebViewClient(new MyWebViewClient ()); private class MyWebViewClient extends WebViewClient { @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { handler.proceed("[email protected]", "mypassword"); } } 
 webview.setWebViewClient(new WebViewClient () { public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { handler.proceed("login", "pass"); } }); 

Поведение WebView по умолчанию заключается в отбрасывании всех запросов на проверку подлинности. Даже если setHttpAuthUsernamePassword.

Вы должны установить WebViewClient и переопределить метод onReceivedHttpAuthRequest

В этом примере область – By Invitation Only

 AuthType Basic AuthName "By Invitation Only" AuthUserFile /usr/local/apache/passwd/passwords Require user rbowen sungo 

Если вы не возражаете писать свое имя пользователя и пароль в URL-адресе, то нет необходимости менять клиентский интерфейс.

Просто откройте следующий URL-адрес в веб-просмотре:

 http://username:[email protected]/userinfo/vid?=1234 

Для второго параметра вам может понадобиться нечто иное, чем "" . Обратитесь к разработчику веб-сайта и узнайте, какой должна быть соответствующая область. Или используйте инструменты, такие как curl чтобы узнать, что такое царство.

Я никогда не получал setHttpAuthUsernamePassword для работы с файловым файлом FileTransfer.download (поскольку он не использует веб-просмотр), но я сделал это для работы с телефонной связью. Стоит отметить, что в этом streamе заканчиваются другие пользователи телефонных разговоров.

  Authenticator.setDefault(new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pass.toCharArray()); } }); 

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

 public class AuthRequestDialogFragment extends DialogFragment { @InjectView(R.id.dauth_userinput) public EditText userinput; @InjectView(R.id.dauth_passinput) public EditText passinput; @OnClick(R.id.dauth_login) public void login(View view) { ((Callback) getTargetFragment()).login(userinput.getText().toString(), passinput.getText().toString()); this.dismiss(); } @OnClick(R.id.dauth_cancel) public void cancel(View view) { ((Callback) getTargetFragment()).cancel(); this.dismiss(); } public static interface Callback { public void login(String username, String password); public void cancel(); } @Override public void onStart() { super.onStart(); WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); getDialog().getWindow().setLayout(width*2/3, height/5*2); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_authrequest, container); ButterKnife.inject(this, view); getDialog().setTitle("Authorization required"); return view; } } 

А также

             

А также

 public class WebViewFragment extends Fragment implements AuthRequestDialogFragment.Callback { @Override public void login(String username, String password) { Log.d(this.getClass().getName(), "Login"); myWebViewClient.login(username, password); } @Override public void cancel() { Log.d(this.getClass().getName(), "Cancel"); myWebViewClient.cancel(); } 

И самое главное:

 private class MyWebViewClient extends WebViewClient { private WebView myView; private HttpAuthHandler httpAuthHandler; private String host; private String realm; @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { AuthRequestDialogFragment authRequestDialogFragment = new AuthRequestDialogFragment(); FragmentManager fragmentManager = ((getActivity()).getSupportFragmentManager()); authRequestDialogFragment.setTargetFragment(WebViewFragment.this, 0); authRequestDialogFragment.show(fragmentManager, "dialog"); this.httpAuthHandler = handler; this.myView = view; this.host = host; this.realm = realm; } public void login(String username, String password) { httpAuthHandler.proceed(username, password); myView = null; httpAuthHandler = null; host = null; realm = null; } public void cancel() { super.onReceivedHttpAuthRequest(myView, httpAuthHandler, host, realm); myView = null; httpAuthHandler = null; host = null; realm = null; } } 

Использует зависимость:

 compile 'com.jakewharton:butterknife:6.0.0' 
  • как отображать карту в android с маркером
  • Как узнать, включен ли экран в Android?
  • Пинч-зум для пользовательского вида
  • Android UI Design: поддержка нескольких экранов
  • Замена приложения «Телефон по умолчанию» на Android 6 и 7 с помощью InCallService
  • Android - связь между двумя устройствами
  • Получение фотографии из контакта
  • Как я могу сделать липкие заголовки в RecyclerView? (Без внешней библиотеки)
  • Не удалось войти в систему. Проверьте подключение к сети и повторите попытку.
  • Для запуска dex в процессе, демону Gradle нужна большая куча. В настоящее время он имеет приблизительно 910 МБ
  • Как получить правильную ориентацию изображения, выбранного из галереи изображений по умолчанию
  • Давайте будем гением компьютера.