0

我目前有一个用 Java 编写的 Android 应用程序,我正在用 Xamarin.Forms 重写它以支持 iOS。在 Android 应用程序中我使用 Jsoup,在 Xamarin 应用程序中我使用 AngleSharp。

我的问题是下面的代码适用于 iOS 和 UWP,但不适用于 Droid 项目。

我的怀疑是调用 context.OpenAsync(url); 时没有建立连接;

我有

<uses-permission android:name="android.permission.INTERNET" />

在我的 Android 清单中。我的目标是 minSdk=17,targetSdk=24。这个问题在模拟器和我的 Galaxy S7 上都存在。

代码:

try
        {
                var url = "<URL>";
                var configuration = Configuration.Default.WithDefaultLoader().WithCookies();
                var context = BrowsingContext.New(configuration);
                var document = await context.OpenAsync(url);
                IHtmlInputElement username = document.QuerySelector("input[id='username']") as IHtmlInputElement;
                IHtmlInputElement password = document.QuerySelector("input[id='password']") as IHtmlInputElement;
                IHtmlFormElement loginform = document.QuerySelector("form[id='logonForm']") as IHtmlFormElement;

                username.Value = "<uname>";
                password.Value = "<pword>";
                document = await loginform.SubmitAsync();

                Debug.WriteLine(context.Active.Url);
            }
            catch (Exception e)
            {
                Debug.WriteLine("ERROR " + e);
            }

NB。由于隐私,我没有显示网址或用户名和密码。任何帮助表示赞赏!

4

1 回答 1

0

这不是 AngleSharp 的问题,而是下面的 Mono 堆栈的问题。确保您已授予应用程序必要的权限。还要确保接受潜在的证书(如果该页面是通过 HTTPS 访问的)。Android 将拒绝不符合权限模型的请求(例如,应用程序没有权限、未安装的自签名证书……)。

希望这可以帮助!(不幸的是,该问题的确切问题从未被发现/传达 - 请参阅相应的 GitHub 问题)。

于 2017-12-14T15:31:05.337 回答