2013-03-10 121 views
-3

编辑:它倾向于HttpListener在这一点..它可能也必须通过套接字+ webclient或所有套接字您必须提出一个GET请求来检索请求头,这是关于所有...套接字也可以允许服务器将事物推送给客户端,而不需要请求,这不能通过webclient完成*如何自动确定登录和http请求所需的客户端请求?

我在做的是输入网址登录服务器:college campus,电子邮件,论坛,您每天需要的其他东西,并为他们创建一个工作登录。由于每个服务器可能会有所不同,请求类型会发生变化:(即)://castRequest.ServicePoint.Expect100Continue = false; //castRequest.ContentType = “application/x-www-form-urlencoded”;

如何从C#客户端发现这些必要的更改,而不是通过数据包和其他苛刻的方法手动工作?

在这里,我们去... - 确定你打开一个网站 - 没问题 - 你从HTML抓住一些登录标签,很容易的.. - 现在我在哪里:在您尝试登录 - 发送用户/密码不仅仅是这两件事的帖子 - 也不是仅仅进入页面 - 有http凭证,网络凭证和安全凭证+ USER/PW 凭证

html用户/ pw输入很容易解析出来:input type =“password”name =“pass回到问题--->如何连接并确定服务器需要的所有请求?

我将如何去分析和打开/关闭每个请求&我也将如何从网络抓取数据:“application/x-www-form-urlencoded”?我也发现,这并不总是返回相同的 cookies,我会通过某些浏览器或其他系统。为什么???

的代码段,这将是必要的://开始

通常这些网站已启用Cookie,让你用一个cookie启用Web客户端:

namespace watcher 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
//throw in a function create a cookie container: 
void startRequest(){ 
     CookieContainer cookieJar = new CookieContainer(); 
     HTTP http = new HTTP(cookieJar); 
} 
     public class HTTP : WebClient 
     { 
      public HTTP() 
      : this(new CookieContainer()) 
      { } 

      public HTTP(CookieContainer c) 
      { 
       CookieContainer = c; 
      } 
     public CookieContainer CookieContainer { get; set; } 

     protected override WebRequest GetWebRequest(Uri address) 
     { 
      WebRequest request = base.GetWebRequest(address); 

      var castRequest = request as HttpWebRequest; 
      if (castRequest != null) 
      { 
       castRequest.CookieContainer = CookieContainer; 
       //castRequest.ServicePoint.Expect100Continue = false; 
       //castRequest.ContentType = "application/x-www-form-urlencoded"; 
      } 
       return request; 
      } 
     } 
    } 

回答

2

我会使用的Firefox添加 - 组合ons Greasemonkey和Firebug。你不能真正以编程方式确定服务器的期望。它们是由人类编写的,每个人都会通过创造力解决问题。您必须手动为每个人分别设定服务器的期望值。即使这样也不容易,(或者在某些情况下,我想,甚至有可能)。您尝试登录的服务器可能会因不同的客户端而出现不同的反应,出于各种各样的原因,人们只能猜测。 (这就是为什么你会遇到cookies问题)。您不需要通过数据包工作,但您需要手动查看发送和接收的请求,这些请求的内容以及数据的含义。要获得进一步的帮助,您需要分别查看每个人并提出具体问题。

+0

+1。 Fiddler是查看请求的另一种选择。注意:由于OP试图以自己的身份登录,因此它应该总是可以进行常规Web身份验证(我同意像智能卡或双因素授权这样的东西是不可能的完全自动化)。 – 2013-03-10 05:34:22

+0

你在各个层面都是错的,这是一个协议,使用它。我现在正在寻找HttpListener – ploxtic 2013-03-10 05:44:18

+0

我明白你现在说的话。在这种情况下,您想要的是解释并运行JavaScript,Flash和/或其他决定发送回服务器的内容的东西。你最好使用一些在普通浏览器中填写表单的东西,比如greasemonkey。 – Jodes 2013-03-10 06:55:31

0

它看起来像HttpListener在这一点..它可能也必须通过套接字+ webclient或所有套接字*您必须提出一个GET请求来检索请求头,这是关于所有...套接字也可以允许服务器向客户端推送东西,而不需要请求,这是不能通过web客户端完成的请求。*

它是HTTP协议,没有客户端/服务器握手,任何互联网都无法工作。除了地址以外,您不需要提供前期信息。服务器的工作是为你工作,而不是相反。