我想在java中使用ORKUT的主頁(http://www.ORKUT.com)的頁面源代碼。Java Orkut登錄
但是在訪問ORKUT的任何頁面之前,需要先登錄到ORKUT。我該怎麼做。它不應該涉及瀏覽器之間
我想在java中使用ORKUT的主頁(http://www.ORKUT.com)的頁面源代碼。Java Orkut登錄
但是在訪問ORKUT的任何頁面之前,需要先登錄到ORKUT。我該怎麼做。它不應該涉及瀏覽器之間
你應該看看在Commons HTTP Client。有了它,您可以發送POST請求與您的登錄數據,然後使用會話ID進行進一步處理。
兩種方式這樣做的:
1)購買Octazen會爲你做的,並保持更新一次的Orkut改變的東西時庫。
2)使用watir劫持瀏覽器。
使用HTTP客戶端就像在水下固定帶有拳擊手套的手錶。它不支持JS,你必須通過cookie來您的工作方式,解析等
我不想涉及瀏覽器。 – 2009-10-07 08:26:56
我認爲watir涉及瀏覽器 – 2009-10-07 08:27:52
我認爲你可以在執行時隱藏瀏覽器。無論如何...所以潛入餅乾和JS。 :-) – TraderJoeChicago 2009-10-07 14:33:36
如果你不介意閱讀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();
}
不錯..優秀代碼 – 2009-11-27 12:51:00
+100感謝您編寫此代碼的努力 – 2014-04-02 12:19:21
我敢肯定,如果你是*意味着*這樣做會有一個API。我只能想到狡猾的原因想要做到這一點...... – 2009-10-06 15:45:21