3

我是一名初学者 Windows Phone 开发人员,我想访问一个 url,使用字符串值(用于用户名和密码)登录网站并在下一个网页上检索数据。我会为此使用 webClient/WebBrowser 吗?我真的不明白我应该如何去“编辑”网页上的文本字段,填写我的用户名和密码等等。

一旦我设法登录到该网站,我希望在我的应用程序中显示一些数据,它们是文本值。我该怎么做呢?非常感谢所有帮助!

4

2 回答 2

3

根据我的评论,我创建了一个方法,该方法接受一个 cookiejar(这允许跨请求的持久会话)一个 uri 和参数,并对 URI 进行发布。

    private static string PerformPostRequest(string uri, CookieContainer cookieJar, string parameters)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.ContentType = "application/x-www-form-urlencoded";
        request.Method = "POST";
        request.CookieContainer = cookieJar;


        byte[] bytes = Encoding.ASCII.GetBytes(parameters);
        Stream os = null;


        request.ContentLength = bytes.Length;  
        os = request.GetRequestStream();
        os.Write(bytes, 0, bytes.Length);

        if (os != null)
        {
            os.Close();
        }


        HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
        StreamReader sr = new StreamReader(webResponse.GetResponseStream());

        return sr.ReadToEnd().Trim();
    }

将所需的登录信息发布到登录页面后,您可以在下一页执行获取请求,并在那里解析数据。

    private static string PerformGetRequest(string uri, CookieContainer cookieJar)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.ContentType = "application/x-www-form-urlencoded";
        request.Method = "GET";
        request.CookieContainer = cookieJar;


        HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
        StreamReader sr = new StreamReader(webResponse.GetResponseStream());

        return sr.ReadToEnd().Trim();
    }
于 2012-12-24T21:39:11.667 回答
3

Stefan 的回答非常好。我将添加我认为缺少的概念部分。

文本字段或更通常称为 HTML 表单和输入标签/元素,只是人类使用键盘、鼠标和 javascript 事件填充所需的视觉表示。这些标签根本不需要在 Web 浏览器中进行编辑。不考虑 Ajax,简单的 Web 浏览器获取值并将它们格式化为请求(通常是 get 或 post)并将该请求发送到 http 服务器。使用 AJAX,请求还有一些必需的参数。

您真正需要的只是一个相当简单的两步过程。首先创建一个包含所需值的请求,然后将该请求发送到 http 服务器。这是对实际需要的一个非常笼统的想法。根据所讨论的网站,有一些警告可能会使这变得更加困难(例如,通常使用CAPTCHA来防止对某些请求进行这种类型的自动化)。

如果您可以控制网站或可以请求其他功能,我不会使用 HTML,而是强烈建议您使用 RESTful 或类似的 API 来访问您的应用程序。这将使您的应用程序中涉及的工作变得不那么复杂。

于 2012-12-24T21:54:35.410 回答