使用WebView setHttpAuthUsernamePassword?

我正在尝试进行基本身份validation以查看受保护的URL。 我想访问受保护的URL,如下所示:

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

所以我使用WebView执行以下操作:

 mWebView.setHttpAuthUsernamePassword("api.test.com", "", "me@test.com", "mypassword"); mWebView.loadUrl("http://api.test.com/userinfo/user?uid=53461"); 

但validation似乎不起作用,我只是得到一个输出错误页面。 我在这里正确使用WebView方法吗?

更新:尝试使用curl:

 curl -u me@test.com: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("me@test.com", "mypassword"); } } 
 webview.setWebViewClient(new WebViewClient () { public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { handler.proceed("login", "pass"); } }); 

WebView的默认行为是放弃所有身份validation请求。 即使setHttpAuthUsernamePassword。

您必须设置WebViewClient并覆盖方法onReceivedHttpAuthRequest

在此示例中,领域By Invitation Only

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

如果您不介意将用户名和密码写入url,则无需更改您的网络视图客户端。

只需在webview中打开以下url:

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

对于第二个参数,您可能需要""以外的其他内容。 联系网站的开发人员,找出适当的领域。 或者,使用像curl这样的工具来找出领域应该是什么。

我从来没有得到setHttpAuthUsernamePassword来使用phonegap的FileTransfer.download(因为它不使用webview),但我发现这与phonegap一起工作。 值得注意的是,是否有任何其他的手机用户最终会在这个post上结束。

  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'