2011-06-04 81 views
0

我花了太多的时间到现在没有成功未能登录到远程站点

从我的网站这是在MVC IM开发尝试发送登录请求到远程站点解决这个问题,直到,例如,脸书。

从提琴手似乎需要以下输入charset_test,lsd,语言环境,电子邮件,通过。

LSD关键似乎是唯一令牌 这里是我的代码

CookieContainer cookies = new CookieContainer() 
private string GetToken() 
{ 
    Uri uri = new Uri("http://www.facebook.com"); 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
    request.CookieContainer = cookies; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    Stream stream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(stream); 

    string htmlText = reader.ReadToEnd(); 

    HtmlDocument document = new HtmlDocument(); --> HtmlAgilePack object 
    document.LoadHtml(htmlText); 
    //Need to check xpath doesn't return null object 
    HtmlNode node = document.DocumentNode.SelectNodes("//input[@name='lsd']").First(); 

    return node.Attributes["Value"].Value; 
} 

private void Login() 
{ 
    string postData = string.Format("charset_test=fixcharset_test&lsd={0} &locale=en_US&email=myemail&pass=mypass", HttpUtility.UrlEncode(GetToken())); 

    Uri uri = new Uri("http://www.facebook.com/login.php"); 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
    request.CookieContainer = cookies;  
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = postData.Length; 
    request.Method = "POST"; 
    request.AllowAutoRedirect = true; 
    StreamWriter requestWriter = new StreamWriter(request.GetRequestStream()); 
    requestWriter.Write(postData); 
    requestWriter.Close(); 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
} 

//After login to facebook suppose to 
public string void AddFriend() 
{ 
    Uri uri = new Uri("http://www.facebook.com"); 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
    request.CookieContainer = cookies; 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string status = response.StatusDescription; 
    StreamReader responseReader = new StreamReader(response.GetResponseStream()); 
    string responseData = responseReader.ReadToEnd(); 
    responseReader.Close(); 
    return responseDat 
} 

请记住,Facebook是只是一个例子而言,我意识到它的API的,我试着登录到网站,没有API 。 不幸的是,响应返回一个Facebook页面,并带有遗憾的消息,无法识别我的浏览器。

任何帮助将超过欣赏。

谢谢,

+0

您似乎忘记提问了。 – Oded 2011-06-04 21:26:06

+0

我的问题是我在代码中错过了什么:) – 2011-06-04 21:47:42

+0

是否有另一种方式将所需的表单输入提交给远程网站? – 2011-06-04 22:00:18

回答

0

您是否在您的请求上设置HTTP_USER_AGENT?

+0

是的,我确实,request.UserAgent =“Mozilla/4.0(兼容; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.1)“;根据提琴手 – 2011-06-04 21:50:37