无法登录远程网站

时间:2011-06-04 21:24:38

标签: login httpwebrequest form-submit

我花了太多时间来克服这个问题,直到现在还没有成功

从我在MVC中开发的网站尝试向远程网站发送登录请求,例如,facebook。

来自fiddler似乎需要以下输入charset_test,lsd,locale,email,pass。

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页面,其中包含一条遗憾的消息,无法识别我的浏览器。

任何帮助都不仅仅是欣赏。

谢谢,

1 个答案:

答案 0 :(得分:0)

您是否根据请求设置了HTTP_USER_AGENT?