2009-10-06 51 views
0

我想在java中使用ORKUT的主頁(http://www.ORKUT.com)的頁面源代碼。Java Orkut登錄

但是在訪問ORKUT的任何頁面之前,需要先登錄到ORKUT。我該怎麼做。它不應該涉及瀏覽器之間

+1

我敢肯定,如果你是*意味着*這樣做會有一個API。我只能想到狡猾的原因想要做到這一點...... – 2009-10-06 15:45:21

回答

2

你應該看看在Commons HTTP Client。有了它,您可以發送POST請求與您的登錄數據,然後使用會話ID進行進一步處理。

0

兩種方式這樣做的:

1)購買Octazen會爲你做的,並保持更新一次的Orkut改變的東西時庫。

2)使用watir劫持瀏覽器。

使用HTTP客戶端就像在水下固定帶有拳擊手套的手錶。它不支持JS,你必須通過cookie來您的工作方式,解析等

+0

我不想涉及瀏覽器。 – 2009-10-07 08:26:56

+0

我認爲watir涉及瀏覽器 – 2009-10-07 08:27:52

+0

我認爲你可以在執行時隱藏瀏覽器。無論如何...所以潛入餅乾和JS。 :-) – TraderJoeChicago 2009-10-07 14:33:36

3

如果你不介意閱讀C#代碼:


string orkutSite = "http://www.orkut.com/Login.aspx"; // enter correct address 
string formPage = ""; 
string afterLoginPage = ""; 

// Get postback data and cookies 
CookieContainer cookies = new CookieContainer(); 
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(orkutSite); 
getRequest.CookieContainer = cookies; 
getRequest.Method = "GET"; 

HttpWebResponse form = (HttpWebResponse)getRequest.GetResponse(); 
using (StreamReader response = 
     new StreamReader(form.GetResponseStream(), Encoding.UTF8)) 
{ 
    formPage = response.ReadToEnd(); 
} 

Dictionary<string, string> inputs = new Dictionary<string,string>(); 
inputs.Add("__EVENTTARGET", ""); 
inputs.Add("__EVENTARGUMENT", ""); 
foreach (Match input in 
    Regex.Matches(formPage, 
     @"<input.*?name=""(?<name>.*?)"".*?(?:value=""(?<value>.*?)"".*?)? />", 
     RegexOptions.IgnoreCase | RegexOptions.ECMAScript)) 
{ 
    inputs.Add(input.Groups["name"].Value, input.Groups["value"].Value); 
} 

inputs["username"] = "xxxxx"; // *please*, check for \\ 
inputs["password"] = "yyyyy"; // correct field names \\ 

byte[] buffer = 
    Encoding.UTF8.GetBytes(
     String.Join("&", 
      Array.ConvertAll<KeyValuePair<string, string>, string>(
       inputs.ToArray(), 
       delegate(KeyValuePair item) 
       { 
        return item.Key + "=" + HttpUtility.UrlEncode(item.Value); 
       }))); 

HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(orkutSite); 
postRequest.CookieContainer = cookies; 
postRequest.Method = "POST"; 
postRequest.ContentType = "application/x-www-form-urlencoded"; 

// send username/password 
using (Stream stream = postRequest.GetRequestStream()) 
{ 
    stream.Write(buffer, 0, buffer.Length); 
} 

// get response from login page 
using (StreamReader reader = new StreamReader(
    postRequest.GetResponse().GetResponseStream(), Encoding.UTF8)) 

{ 
    afterLoginPage = reader.ReadToEnd(); 
} 

+0

不錯..優秀代碼 – 2009-11-27 12:51:00

+0

+100感謝您編寫此代碼的努力 – 2014-04-02 12:19:21