PDA

View Full Version : کار با صفحات html



BestFriend
شنبه 16 دی 1391, 22:16 عصر
با سلام من یه برنامه نوشتم که بتونم سورس یه سایت رو تو یه textbox نمایش بدم

حالا میخوام المنت ها رو دستکاری کنم و بفرستم سمت سرور و دوباره جواب بگیرم

یعنی یه ربات میخوام درست کنم که یوزر و پسورد رو وارد کنه و وارد سایت بشه

حالا این یوزر و پسورد رو چه طوری باید بفرستم؟


public static String code(string Url,string method)
{

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url);
myRequest.Method = method;
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();

return result;
}


با این کد هم فراخوانی میکنم اون رو


string temp = code("http://www.istgah.com","GET");

saeidpsl
یک شنبه 17 دی 1391, 04:41 صبح
بفرما:چشمک:

BestFriend
یک شنبه 17 دی 1391, 15:20 عصر
ممنون عزیز جان ولی این کار نمیکنه

در ضمن میشه در مورد نحوه ی کار یه مقدار توضیح بدی؟ من ایستگاه رو مثال زدم

کلا هدف من از این موضوع فرستادن یه سری پارامتر ها به سمت سرور بود مثل یوزر نیم و پسورد و ....

ممنون میشم در مورد نحوه ی کار یه مقدار برام توضیح بدی

با تشکر.

saeidpsl
یک شنبه 17 دی 1391, 15:37 عصر
:متفکر: دوست عزیز برنامه به خوبی کار میکنه دوباره چک کن
اینا رو درست وارد کن
string email = "@yahoo.com";
string password = "pass";
:چشمک:

BestFriend
یک شنبه 17 دی 1391, 15:39 عصر
بله ببخشید اشتباه از من بود درست کار کرد خیلی گلی دوست عزیز

میشه یه توضیح هم در مورد نحوه ی کارکرد این کد برام بنویسی در ضمن کوکی نیاز نیست ساخته بشه ؟

با تشکر.

saeidpsl
یک شنبه 17 دی 1391, 15:58 عصر
خواهش:چشمک:
نه نیازی نیست
بالای هر کد توضیح داره

BestFriend
سه شنبه 19 دی 1391, 23:56 عصر
با سلام من با این کد تونستم لاگین کنم ولی نتونستم بین صفحات جابجا بشم یعنی وقتی لاگین میکنم صفحه اصلی بعد از لاگین رو میاره ولی وقتی یه آدرس دیگه از صفحه کاربری رو بهش میدم من رو میندازه بیرون و دوباره میره تو صفحه لاگین

باید چیکار کنم؟

با تشکر.

saeidpsl
چهارشنبه 20 دی 1391, 01:04 صبح
برنامه درست کار میکنه:چشمک:
اینم سند http://ir2up.ir/up19/de1de1a4b4b0e1.rar
:لبخند:

BestFriend
چهارشنبه 20 دی 1391, 17:48 عصر
دوست عزیز من با کد میخوام بین صفحات جابجا بشم نه با مرورگر و کلیک کردن من یه روبات میخوام بسازم که بره و تو صفحات سایت بگرده و یه چیزی که مد نظر منه مثلا اخبار و عکس و ... رو پیدا کنه مشکل من هم فقط تو اینجاست که تو صفحات نمیتونم جابجا بشم و فقط تو همون صفحه اول میمونه و بخوام برم به صفحات دیگه من رو میندازه تو صفحه لاگین

فکر کنم باید با session یا کوکی کار کنم ؟

BestFriend
پنج شنبه 21 دی 1391, 23:29 عصر
ممنون از دوستان خودم فهمیدم چه طوری میشه این کار رو انجام داد!

اول اینکه باید کوکی هایی که تو webresponse دریافت میکنید رو تو یه رشته ذخیره کنید و تو ارسال های بعدی توی webrequest جای username و password این کوکی رو ست کنید به شکل زیر:

کدی که برای صفحه لاگین دوستمون زحمت کشیدن رو باید بنویسیم البته با یه مقدار تغییر مثل زیر:


string email = "XX";
string password = "XX";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(TextBox1.Text);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
UTF8Encoding encoding = new UTF8Encoding();
byte[] data = encoding.GetBytes("name=" + email + "&password=" + password + " ******* ");
webRequest.ContentLength = data.Length;
webRequest.CookieContainer = new CookieContainer();
Stream newStream = webRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
HttpWebResponse webResponse;
webResponse = (HttpWebResponse)webRequest.GetResponse();
textBox2.Text = webResponse.Headers["Set-Cookie"];
cook = webResponse.Headers["Set-Cookie"]; ;
MessageBox.Show(webRequest.CookieContainer.Count.T oString());
string html;
using (Stream strmresponse = webResponse.GetResponseStream())
{
using (StreamReader reader = new StreamReader(strmresponse, Encoding.UTF8))
{
html = reader.ReadToEnd();
}
}




یه توضیح در مورد کد بالا :

textbox1 برای گرفتن آدرس سایت هست که در اولین گام باید آدرس صفحه لاگین نوشته بشه البته اگه برای لاگین کردن مینویسید
username و password هم که مشخص هست
و میمونه اون متغیر data که فرستاده میشه باید طبق سورس سایت (تو ie از طریق منوی : view و بعد گزینه ی viewsource) نوشته بشه که معمولا دوتا فیلد نام کاربری و رمز عبور رو داره و چند تا فیلد hidden که باید حتما جای اون ستاره ها نوشته بشن با مقدارشون.

خب کد بالا دیگه توضیحی نداره وقتی این کد اجرا بشه تو webresponse همون کوکی ها ریخته میشه و یه سری کد که سورس سایت هست و میتونید تحلیلش بکنید.
حالا اگه بخوایید برید یه صفحه ی دیگه ای که مربوط به صفحه کاربری میشه حتما ازتون کوکی میخواد که اگه کوکی ها رو وارد نکنید میندازتتون تو صفحه ی لاگین و همه چی از نو :

به صورت زیر هم میتونیم به تمامی لینک هایی که منوط به لاگین شدن هستن دسترسی داشته باشیم:


HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(TextBox1.Text);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.CookieContainer = new CookieContainer();
Uri r1 = new Uri(TextBox1.Text);
webRequest.CookieContainer.SetCookies(r1,cook);
HttpWebResponse webResponse;
webResponse = (HttpWebResponse)webRequest.GetResponse();
textBox2.Text = webResponse.Headers.ToString();
//textBox1.Text = webResponse.Headers.ToString();
//string strCook = webResponse.Headers["d3937b92c344331bc20d81db97d6b1d0"];
string html;
using (Stream strmresponse = webResponse.GetResponseStream())
{
using (StreamReader reader = new StreamReader(strmresponse, Encoding.UTF8))
{
html = reader.ReadToEnd();
}
}




در کل باید برای لاگین یک بار کد اولی رو نوشت و برای صفحات بعد دیگه باید از کد دومی استفاده کرد یعنی کد اول فقط یک بار اون هم برای لاگین استفاده میشه.

عزیزانی که مثل من میخوان یه ربات برای سایت ها بسازن این کد خیلی به دردشون میخوره.
امیدوارم کامل توضیح داده باشم .

kouroshfar
پنج شنبه 12 بهمن 1391, 10:04 صبح
این خیلی عالیه و ما میتونیم به راحتی توی سایتی هایی که با پی‌اچ‌پی نوشته شدن به راحتی لاگین کنیم. واسه سایت هایی که با asp.net نوشته شدن باید چیکار کرد؟ من حالت های مختلفی رو چک کردم ولی نتوسنتم آخر کاری انجام بدم :(