برگزیده های پرشین تولز

درخواست کمک برای Login به یک Webpage از طریق Winform

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
سلام

من میخوام از طریق یک Winform به عنوان مثال به سایت زیر لاگین کنم:
http://EXAMPLESITE.com/vendors/login.php

منتها به نتیجه نمیرسم.
این کد C# :

کد:
private void GetData()
        {

            Uri uri = new Uri("http://EXAMPLESITE.com/vendors/login.php");
            WebClient client = new WebClient();
            

            // Create a series of name-value pairs to send
            NameValueCollection collection = new NameValueCollection();
            

            // Add necessary parameter-value pairs to the name-value container
            collection.Add("username", "ali_moosavi15");
            collection.Add("password", "astala");
                    

            // Upload the NameValueCollection
            byte[] response;
            response = client.UploadValues(uri.AbsoluteUri, "POST", collection);
            UTF8Encoding objUTF8 = new UTF8Encoding();

            // Display the response
            richTextBox1.Text(objUTF8.GetString(response));

اینم کد HTML صفحه لاگین:

کد:
<html dir="rtl">
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="fa">
<title>Admin Login - Iran Market Center</title>
</head>
<body>
<div align="center">
<table border="0" width="800" cellspacing="0" cellpadding="0" height="100%">
	<tr>
		<td height="150" background="http://www.30ds.com/images/header.jpg">&nbsp;</td>
	</tr>

	<tr>
		<td><div align="center">
		<table border="0" width="300" cellspacing="0" cellpadding="0">
			<tr>
				<td>
				<form method="POST" action="login.php" name="f1">
					<fieldset style="padding: 2">
					<legend>ورود فروشنده</legend><p align="center" style="margin-top: 0; margin-bottom: 0">

					<font color="#FF0000"><br>
					</font></p>

					<table border="0" width="100%" cellspacing="0" cellpadding="0">
						<tr>
							<td align="center">نام کاربری</td>
							<td><input type="text" name="username"></td>
						</tr>
						<tr>

							<td align="center">کلمه عبور</td>
							<td><input type="password" name="password"></td>
						</tr>
						<tr>
							<td>&nbsp;</td>
							<td>&nbsp;</td>
						</tr>
						<tr>

							<td colspan="2" align="center">
							<input type="submit" value=" ورود " name="B1">
							<input type="reset" value="مجدد" name="B2"></td>
						</tr>
					</table>
					</fieldset></p>
				</form>
				</td>
			</tr>

			</table></div>
		</td>
	</tr>
	<tr>
		<td height="20" dir="ltr" align="center"><font size="1" color="#000080">Powered By N.E.T E-commerce group © 2007</font></td>
	</tr>
</table>
</div>
<script lang="javascript" type="text/javascript">
document.f1.username.focus();	
</script>

</body>
</html>

کسی میدونه مشکل از کحاست؟
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
والا من تا حالا این کد رو استفاده نکردم ولی خیلی بعید می دونم راهی باشه که بتونی پارامترهای درون صفحه وب رو از دورن win form ست کنی و بفرستی بهش. در واقع چطور می شه به صفحه login مقادیر user و pass رو فرستاد ؟
قاعدتا صفحه login باید بوسیله query string مقادیر رو دریافت کنه یعنی مثلا شما از توی win form آدرس http://EXAMPLESITE.com/vendors/login.php?user='***'&pass='***' رو فراخوانی کنید و به این وسیله پارامترها رو پاس بدید به صفحه (که تا اینجاش کار ساده ای هست). حالا مساله اینجاست که چطور باید نتیجه رو از صفحه login بگیرید ؟!
اینجاست که من توصیه میکنم اگر صرفا می خواید از درون win form به یک سایت login کنید خب یه web server ساده بنویسید که از درون web server بتونید به متدهای login دیتابیس دسترسی داشته باشید و نتیجه رو هم بگیرید و سپس از درون win form متصل بشید به web server و user و pass رو پاس بدید بهش و نتیجه رو بگیرید .
اگه نامفهوم بود بگو بیشتر توضیح بدم
 

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
میشه در مورد webserver بیشتر توضیح بدید؟
به نکته ای که هست اون صفحه لاگین رو من سورسشو ندارم و نتها چیزی که دارم همون کد html هست.

سرچ که کردم با WebResponse و WebRequest هم گویا میشه یه کارایی کرد. درسته؟
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
با این ها می تونی صفحه login رو درون win app نمایش بدی . و البته فایده ای هم نداره چون نمی تونی از صفحه login استفاده کنی .
اما همونطور که گفتم اگه هدفت اینه که از درون win app وارد یک وب سایت بشی باید اولا یک وب سرویس روی اون وب سایت نوشته شده باشه درونش متدی برای ورود تعریف شده باشه . یعنی یوزر و پسورد رو بگیره و لاگین کنه . بعد از اون شما می تونید در win app به web service یه reference ایجاد کنید و همون متد رو فراخوانی کنید .

در واقع web service پلی هست میان web app و win app . البته فقط این نیست ها !
یه مثال می زنم . چطوریه که هر وب سایتی از راه می رسه یه بخش توی خودش داره که آب و هوای همه نقاط دنیا رو نشون می ده . اطلاعات رو از کجا میاره ؟ سایت weather.com یه وب سرویس طراحی کرده که اطلاعات آب و هوا رو ارائه می ده . این وب سرویس شامل چندتا متد هست که دسترسی محدود به دیتابیس آب و هوا دارن . شما با استفاده از این وب سرویس اطلاعات آب و هوا رو از اون سایت می گیری و درون سایت خودت نشون می دی .اکی ؟

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


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

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
با این ها می تونی صفحه login رو درون win app نمایش بدی . و البته فایده ای هم نداره چون نمی تونی از صفحه login استفاده کنی .
اما همونطور که گفتم اگه هدفت اینه که از درون win app وارد یک وب سایت بشی باید اولا یک وب سرویس روی اون وب سایت نوشته شده باشه درونش متدی برای ورود تعریف شده باشه . یعنی یوزر و پسورد رو بگیره و لاگین کنه . بعد از اون شما می تونید در win app به web service یه reference ایجاد کنید و همون متد رو فراخوانی کنید .

در واقع web service پلی هست میان web app و win app . البته فقط این نیست ها !
یه مثال می زنم . چطوریه که هر وب سایتی از راه می رسه یه بخش توی خودش داره که آب و هوای همه نقاط دنیا رو نشون می ده . اطلاعات رو از کجا میاره ؟ سایت weather.com یه وب سرویس طراحی کرده که اطلاعات آب و هوا رو ارائه می ده . این وب سرویس شامل چندتا متد هست که دسترسی محدود به دیتابیس آب و هوا دارن . شما با استفاده از این وب سرویس اطلاعات آب و هوا رو از اون سایت می گیری و درون سایت خودت نشون می دی .اکی ؟

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


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

حدس میزدم که نشه با web service این کارو کرد.
پس چطوریه که یه سری برنامه ها به ایمیل یاهم یا جیمیل لاگین میکنه؟ یه راهی داره حتما.
روبات نمیخوام بنویسم... میخوام یه برنامه بنویسم که توی یه سری از page های توی اکانتم دنبال یه سری string بگرده و اونارو جمع کنه یه جا. منتها باید حتما لاگین کنم که بتونم برم تو اون صفحه ها.
توی نت که سرچ کردم خیلیا همین سوال رو داشتنو به نتیجه رسیدن بعضی ها هم نرسیدن . همه اون کدهارو انتحان کردم که یا با webclient و uploadvalues بوده یا با WebResponse و WebRequest .
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
به نظر من باید درست باشه کدت ! دوتا احتمال میدم !
1- ممکنه آدرس صفحه ات کوئری استرینگ داشته باشه ، چون webclient کوئری استرینگ رو ساپرت نمیکنه ، البته باید یه خورده برنامه بنویسی تاکوئری استرینگ ها رو هم بهش بفهمونی !

2- ممکنه بخاطر فیلد پسورد باشه ، من میگن یه کاری کن یه فرم خودت بساز ببین اوضاعش چطوریه ! ممکنه فیلد پسورد مشکل ایجاد کنه ( همینطوری دارم احتمال میدم تا حالابا وب کلاینت لاگین نکردم !

ارورت چیه ؟! از کجا میفهی لاگین نشدی ؟
اصلا ممکنه که لاگین شده باشی و توی مرحله بعد که میخوای از امکانات لاگین شدگی استفاده کنی نمیتونی چون کوکی رو نگه نمیداری ! میدونی که باید رو بروزرت کوکی نوشته بشه !
 

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
به نظر من باید درست باشه کدت ! دوتا احتمال میدم !
1- ممکنه آدرس صفحه ات کوئری استرینگ داشته باشه ، چون webclient کوئری استرینگ رو ساپرت نمیکنه ، البته باید یه خورده برنامه بنویسی تاکوئری استرینگ ها رو هم بهش بفهمونی !

2- ممکنه بخاطر فیلد پسورد باشه ، من میگن یه کاری کن یه فرم خودت بساز ببین اوضاعش چطوریه ! ممکنه فیلد پسورد مشکل ایجاد کنه ( همینطوری دارم احتمال میدم تا حالابا وب کلاینت لاگین نکردم !

ارورت چیه ؟! از کجا میفهی لاگین نشدی ؟
اصلا ممکنه که لاگین شده باشی و توی مرحله بعد که میخوای از امکانات لاگین شدگی استفاده کنی نمیتونی چون کوکی رو نگه نمیداری ! میدونی که باید رو بروزرت کوکی نوشته بشه !

اون قسمت آخر هست که response رو بر میگردونه، که میریزمش توی richTextbox اونجا باز کد html صفحه لاگین رو بر میگردونه. کوکی هم یه سرچی باید بکنم ببینم چه جوریه. منم خودم تاحالا با این کلاس ها کار نکردم.
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
من اتفاقا با webclient خیلی کار کردم ، کار های باحالی هم کردم :D متنها تاحالا لاگین نکرده بودم ! من احتمال خیلی زیادی میدیم که قضیه از کوکی اه باشه ! این بابا که کوئری استرینگ رو نمیفهمه کوکی رو بفهمه ؟! :D برو دنبال کوکی نتیجشم اینجا بذار .
 

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
من اتفاقا با webclient خیلی کار کردم ، کار های باحالی هم کردم :D متنها تاحالا لاگین نکرده بودم ! من احتمال خیلی زیادی میدیم که قضیه از کوکی اه باشه ! این بابا که کوئری استرینگ رو نمیفهمه کوکی رو بفهمه ؟! :D برو دنبال کوکی نتیجشم اینجا بذار .

لول ! با منی کوئری استرینگ نمیفهمه؟:D
سریع شفاف سازی کن تا له نشدی:D:f34r:

طبق تنایجی که فعلا بدست اومده استفاده از webclient واسه لاگین مجاز نمیباشد :d چون کار با کوکی و این کلاس دهن آدم صاف میشه. باید با WebResponse و WebRequest کار کرد تا کوکی هارو بشه راحت تر هندل کرد.
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
تو مگه وب کلاینتی !

دیدی گفتم !
 

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
یه چیزی!
این سایته وقتی توی browser میخوام با کوئری برم توی اکانت نمیشه. اینطوری یعنی:
کد:
http://ExampleSite.com/vendors/login.php?username=xeeber&password=xeeber

چی میشه یعنی؟!
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
خوب متد دریافت اطلاعاتش Post اه دیگه ! مگه بیقه سایتها رو اینطوری میتونی لاگین شی اصلا ؟!
 

cyber boy

Registered User
تاریخ عضویت
6 ژانویه 2005
نوشته‌ها
1,374
لایک‌ها
7
سن
36
محل سکونت
US
دوست عزیز این آدرس رو مطالعه فرمایید . شاید بتونه کمکتون کنه

دستت درد نکنه عزیز:)
مطالعش میکنم ... فک کنم این روش هم یه جایی دیدم ولی زیاد کار نکردم روش... باید ببینم این جواب میده با نه.
مرسی:happy:
 
بالا