2012-12-24 24 views
3

我是一个初学者的Windows Phone开发人员,我想去一个网址,登录到使用字符串值(用户名和密码)的网站上的下一个网页上检索数据。我会用这个webClient/WebBrowser吗?我不太了解我应该如何去编辑网页上的文本字段,以填写我的用户名和密码以及什么。如何使用C#编辑网站中的文本字段?

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

+0

您应该根据需要将哪些数据发布到页面来查看它,而不是需要操纵哪些表单域。这会在您的应用程序和页面之间创建一个非常脆弱的链接,但是如果您在点击提交按钮后使用诸如chrome检查器之类的内容来检查请求,则可以查看应该发布到页面的什么类型的参数。而像HttpWebRequest和HttpWebResponse对象应该为你做的伎俩。 –

回答

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(); 
    } 
+0

非常感谢!当你提交后检查“它”时,我会看到什么?我在打字之前检查过这些字段并知道他们的ID,但我怎么知道传递给编码器的参数?此外,为什么这个代码如此令人难以置信的复杂?!我从来没有处理过网络开发,也没有理解你写的东西的90%。在尝试做这件事之前,我应该在其他地方看看这个主题吗?再次感谢! – KevEllis

2

Stefan的回答很不错。我将添加我认为缺失的概念性片段。

文本字段或更通常称为HTML表单和输入标记/元素,只是人类使用键盘,鼠标和JavaScript事件填充所需的可视表示。这些标签根本不需要在Web浏览器中编辑。忽略Ajax,简单的Web浏览器会将这些值取出并格式化为一个请求(通常为get或post),然后将该请求发送到http服务器。通过AJAX,该请求还有几个必需的参数。

你真正需要的只是一个相当简单的两步过程。首先创建一个包含所需值的请求,然后将该请求发送到http服务器。这是实际需要的一个非常普遍的想法。有一些注意事项可能会使这变得更加困难,具体取决于所讨论的网站(例如,通常CAPTCHA用于防止某些来自请求的此类自动化)。

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

+0

这是您需要在应用程序中执行以获取所需数据的好概述。我完全同意,通过HTTP Web请求以外的任何其他任何方式访问此数据将为您提供更稳定的连接。 –