PDA

View Full Version : نمونه : ارسال اطلاعات به یک سرور با استفاده از Http



ghabil
سه شنبه 22 آبان 1386, 23:39 عصر
این چند خط مقادیر دو تا فیلد مثلا UserName و Password رو به آدرسی که نوشته شده با متد Post میفرسته.
این کار میتونه برای پر کردن فرمهای اینترنتی هم مفید باشه یعنی یک فرم Html در یک سایت رو مثلا از دلفی پر کنید ، برای این کار سورس صفحه رو ببینید مقادیر Input رو پیدا کنید ، که در واقع همون فیلدها هستند و اسمشون رو در بیارید بعد هم مقداری که میخواهید بهشون نسبت بدید رو مثل مثال تعیین کنید ، بعد آدرسی که بهش فرستاده میشند رو با پیدا کردن Action صفحه بدست بیارید و اطلاعات رو پست کنید :



procedure THttpTestForm.btSendClick(Sender: TObject);
var
ARequestContent : TStringList;
AResponse: String;
begin
ARequestContent := TStringList.Create;
try
ARequestContent.Add('username=' + edName.Text);
ARequestContent.Add('password=' + edPass.Text);
AResponse := IdHTTPTest.Post('http://AWebSite.com/login.php', ARequestContent);
....
finally
ARequestContent.Free;
end;
end;


کد برنامه رو هم میزارم. منتها این کد رو اجرا نکنید چون فایده ای نداره باید آدرس و اسم فیلدها رو برای جای خاصی در نظر بگیرید.

جواب برگشتی که توی AResponse هست اون متن Htmlی هست که سرور بر میگردونه که میتونید هرطوری دوست دارید پروسسش کنید.

این یک مثال خیلی ساده هست ، یکمی خودتون با Idhttp بازی کنید کلی اکانات دیگش رو هم میبینید.

نکته مهم :
برای ارسال پارامترها به سرورهای دات نتی لازم هست که حتما خط زیر رو در Header ریکوستتون بزارید و الا پارامترها رو سرور نمیخونه ، من زیاد دیدم اینجا میپرسند که چرا وب سرویسها نمیتونند با دلفی ارتباط برقرار کنند، یا چرا پارامترهاشون توی سرور خالی دریافت میشند، دلیلش نبودن این هدر هست ، و البته ربطی به دلفی هم نداره حتی توی C# هم اگر از HttpWebReuest استفاده مکینید باید این رو به هدر اضافه کنید :


Content-Type: application/x-www-form-urlencoded.


کلمات کلیدی : TIdHTTP، دلفی ، Indy، Post، ایندی ، Client، Form, Html

dkhatibi
چهارشنبه 23 آبان 1386, 06:20 صبح
با تشکر
این مثال را در مورد سایت یاهو (میل) می تونید تکمیل کنید؟

ghabil
چهارشنبه 23 آبان 1386, 12:58 عصر
اگر فقط کد رو نشوته بودم این سوالات عیبی نداشت ، اما وقتی کل پروسه بدست آوردن فیلدها و بدست آوردن اکشن فرم رو نوشتم ، دیگه بهتره که به عنوان تمرین هم که شده خودت این کار رو انجام بده و برای بقیه بزار....

dkhatibi
پنج شنبه 24 آبان 1386, 06:08 صبح
سلام
من از تو سورس فیلدهای UserName و Passwd را به عنوان Input یافتم. و جایگزینی کردم. و آدرس را هم به دو شکل

http://www.Yahoomail.com/
و

https://login.yahoo.com/config/mail?.intl=us
وارد کردم. اولی ConnectionRefused میده دومی بلافاصله خطایی مبنی بر اشتباه بودن آدرس مسده.
شاید مشکل از اینه که پروتکل اون Https ه نه Http

Hamid_PaK
پنج شنبه 24 آبان 1386, 08:13 صبح
نه سیستم ورودی ساهو پیچیده تر از این حرفاست که بخواهید با یک درخواست و ارسال حلش کنید و باید به این نکته که سرور یاهو نیز حفاظت شده است اشاره شود و برای ورود درخواست ها را به صفحات دیگه ارجاع میدهد.
یه نگاهی هم به این فرم بیانداز با این می تونی ورودی را تکمیل کنید.


<form method="post" action="https://login.yahoo.com/config/login?" name="login_form">
<input name=".src" value="ym" type="hidden">
<input name=".tries" value="0" type="hidden">
<input name=".done" value="http://mail.yahoo.com" type="hidden">
<input name=".md5" value="" type="hidden">
<input name=".hash" value="" type="hidden">
<input name=".js" value="" type="hidden">
<input name=".partner" value="" type="hidden">
<input name=".slogin" value="praiser_man" type="hidden">
<input name=".intl" value="us" type="hidden">
<input name=".fUpdate" value="" type="hidden">
<input name=".prelog" value="" type="hidden">
<input name=".bid" value="" type="hidden">
<input name=".aucid" value="" type="hidden">
<input name=".yplus" value="" type="hidden">
<input name=".chldID" value="" type="hidden">
<input name="pkg" value="" type="hidden">
<input name="hasMsgr" value="0" type="hidden">
<input name="login" id="username" value="test_user" type="hidden">
<input name="passwd" id="passwd" value="password" type="hidden">
</form>


یا حق ...

AlirezaBahredar
پنج شنبه 24 آبان 1386, 15:19 عصر
علیرضا دست درد نکنه.....
فقط داداش میشه بگی چجوری بعد ازlogin کردن می تونیم به یک صفحه خاص دسترسی داشته باشیم.منظورم اینه که با Loggin کردن از این طرقSession ای واسه رفتن به صفحات دیگه ایجاد میشه یا نه؟

Hamid_PaK
پنج شنبه 24 آبان 1386, 18:19 عصر
بله session ورودی تعریف و تمامی صفحاتی که نیاز به نام کاربری دارد مورد استفاده قرار خواهد گرفت.

یا حق ...

ghabil
جمعه 25 آبان 1386, 12:01 عصر
ببین چند روش Session Managment در HTTP وجود داره :

Cookies: که سرور برای کلاینت زمانی که شناسایی شد ،یک Cookie میفرسته و هر دفعه که مجددا کلاینت خواست با سرور ارتباط برقرار کنه این کوکی رو میفرسته و سرور متوجه میشه که قبلا این کلاینت رو شناسایی کرده و از توی لیست سشنهاش با کمک اون کوکی این سشن مخصوص کلاین رو پیدا میکنه.

URL Tracking: در این روش بجای کوکی از یک شماره Session استفاده میشه که بصورت یک پارامتر بعد از Url صفحاتی که کاربر توشون میره ، قرار میگیره و سرور هربار کاربر رو با این پارامتر شناسایی میکنه

Hidden Fields: در این روش یک سری Input از نوع Hidden توی هر پاسخی که سرور میسازه گذاشته میشه که اطلاعات لازم برای شناسایی Session توی این فیلدها هست و کلاینت هم هربار که میخواد دوباره به سرور مراجعه کنه این اطلاعات رو مجددا برای سرور میفرسته.

hamed_gm
یک شنبه 11 اسفند 1387, 22:09 عصر
برای وصل شدن به سرور یاهو می تونید از کد زیر استفاده کنید!
var
SL: TStringList;
begin
IdHTTP1.IOHandler:=ssl;
sL := TSTringList.Create;
SL.Values['login'] := txtuser.Text;
SL.Values['passwd'] := txtpasword.Text;
Memo1.Lines.Text:=IdHTTP1.Post('https://login.yahoo.com/config/login?',sl);

undefined
سه شنبه 12 خرداد 1388, 02:42 صبح
با سلام
ببخشید اما من به این خطا بر خوردم
زمانی که میخواد اطلاعات رو به سرور ارسال کنه این خطا رو میده


HTTP/1.1 302 Found

سایت مقصد .Net هستش و هدر رو هم برابر با تنظیمات خودتون تنظیم کردم یکبار هم هماند یک درخواست ارسالی از خود سایت اما باز هم همین خطا .

hamedsoft
جمعه 30 مرداد 1388, 16:02 عصر
با سلام
ببخشید اما من به این خطا بر خوردم
زمانی که میخواد اطلاعات رو به سرور ارسال کنه این خطا رو میده


HTTP/1.1 302 Found

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

فکر کنم اگه پراپرتي HandleRedirects مربوط به شيء HTTP رو در حالت True قرار بديد مشکل حل بشه.

golbafan
شنبه 21 شهریور 1388, 10:33 صبح
سلام من میخوام عکس های Twebbrowser رو بدون اینکه از url استفاده کنم ذخیره کنم

در صورت استفاده کردن از URL عکس رفرش شده و عوض میشود

gbg
سه شنبه 26 مهر 1390, 18:01 عصر
سلام
من هم برای ارسال و دریافت به سرور از کدی مثل کد شما استفاده کردم
مشکل من در session هستش
من لاگین می کنم و صفحه جدید رو دریافت می کنم ولی وقتی در خواست جدید رو ارسال می کنم دوباره اطلاعات صفحه لوگین برام ارسال میشه
حالا می خوام ببینم در جواب اولی چطوری طلاعات session رو بدست بیارم و چطور به همراه درخواست دوم ارسال کنم

vcldeveloper
چهارشنبه 27 مهر 1390, 00:59 صبح
مشکل من در session هستش
شما می تونید با یک اسنیفر بررسی کنید که سایت مربوطه برای session از چه مکانیزمی استفاده میکنه؛ در اکثر مواقع مکانیزم استفاده شده مبتنی بر Cookie هست. اگر مبتنی بر Cookie باشه، شما باید بعد از لاگین در سایت، Cookie مربوطه را ذخیره کنید، و در درخواست های بعدی آن را به سایت ارسال کنید. برای این کار، یک Cookie Manager به پروژه اضافه کنید، و به خصوصیت CookieManager از کلا TIdHttp اختصاص بدید.

gbg
چهارشنبه 27 مهر 1390, 17:12 عصر
سلام
من CookieManagerداشتم و به idHTTP هم وصلش کرده بودم و بخاطر همین فکر کردم شاید به جای کوکی از session استفاده میکنه
ولی برای CookieManager هیچ کدی ننوشتم
نمی دونم چطور مقدار کوکی ها رو بگیرم و چطور دوباره بفرستم
سرچ هم کردم به نتیجه ای نرسیدم

vcldeveloper
پنج شنبه 28 مهر 1390, 00:51 صبح
نمی دونم چطور مقدار کوکی ها رو بگیرم و چطور دوباره بفرستم
اگر مقدار خصوصیت AllowCookies مساوی True باشه، IdHttp به طور خودکار کوکی های ارسالی از سرور را به CookieManager پاس میده، و هر زمان که درخواستی به اون سرور ارسال میکنه، کوکی های مربوط به اون سرور رو هم از CookieManager میگیره و با درخواست به سرور ارسال میکنه. پس عملا نیازی نیست که شما کار خاصی انجام بدید.

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

gbg
جمعه 29 مهر 1390, 13:10 عصر
AllowCookies هم True هستش
من اسنیفر خوب پیدا نکردم اگه سراغ داری معرفی کن ممنون

vcldeveloper
جمعه 29 مهر 1390, 23:45 عصر
WireShark

----------

tadeh2010
شنبه 26 مرداد 1392, 19:58 عصر
سلام
اگر صفحه ی مورد نظر یوزر و پسورد را بصورت یک پنجره ی popup بگیرد چه؟
مثلا آدرس صفحه اینجوری باشد

http://10.251.16.33/IN_monitoring?
!!
آن وقت چطوری بایستی یوزر و پسورد را بهش بفرستیم؟

vcldeveloper
چهارشنبه 06 شهریور 1392, 22:51 عصر
اگر صفحه ی مورد نظر یوزر و پسورد را بصورت یک پنجره ی popup بگیرد چه؟
یک صفحه وب به دو صورت کلی میتونه اطلاعات مربوط به اعتبار سنجی کاربر را دریافت کنه؛ اول اینکه از خاصیت Authentication مربوط به HTTP استفاده کنه، مثلا از Basic Authentication استفاده کنه، که در اون صورت مرورگر خودش متوجه میشه که باید از کاربر اطلاعات مربوطه رو بگیره و به سرور ارسال کنه. در این حالت مرورگر یک پنجره Pop-up برای دریافت اطلاعات مربوطه به کاربر نمایش میده. دوم هم اینکه از یک فرم HTML استفاده شده باشه که کاربر در فیلدهای اون اطلاعات مورد نظر را وارد کنه، سپس دکمه Submit فرم را کلیک کنه، تا اطلاعات به سرور مربوطه برای پردازش ارسال بشه. هر دو حالت فوق رو میشه با استفاده از اسنیفر بررسی کرد، البته به شرطی که اتصال مربوطه از نوع HTTPS نباشه.

BORHAN TEC
پنج شنبه 07 شهریور 1392, 01:36 صبح
با سلام :قلب:

البته به شرطی که اتصال مربوطه از نوع HTTPS نباشه.
در تکمیل صحبتهای vcldeveloper باید بگویم که با Colasoft Capsa 7 میشه HTTPS رو هم اسنیف کرد البته اگر از نوع کلید عمومی باشد مثل FaceBook و ... در برخی حالات هم مثلاً یک اپلیکیشن با یک کلید خصوصی از HTTPS برای برقراری اطلاعات استفاده می کنه که میشه اون رو شنود کرد ولی از اونجایی که این اطلاعات کد میشن هیچ چیزی نمیشه از اون متوجه شد و شنود اونها عملاً بی فایده است و در صورتی میشه اون رو دیکد کرد که به کلید خصوصی اون هم دسترسی داشته باشیم و لا غیر.

tadeh2010
پنج شنبه 07 شهریور 1392, 11:20 صبح
خوب دوستان ممنونم من نمی دونم چطوری sniff بکنم ؟
حالا با یه نرم افزار مثل Wireshark-win64-1.10.1
ولی من اینو نصب کردم ولی نمی دونم باید چیکار بکنم
چه اطلاعاتی بدست بیارم؟
چطوری؟
و چیکارشون بکنم؟
:متفکر:

vcldeveloper
پنج شنبه 14 شهریور 1392, 22:50 عصر
در تکمیل صحبتهای vcldeveloper باید بگویم که با Colasoft Capsa 7 میشه HTTPS رو هم اسنیف کرد البته اگر از نوع کلید عمومی باشد مثل FaceBook و ... در برخی حالات هم مثلاً یک اپلیکیشن با یک کلید خصوصی از HTTPS برای برقراری اطلاعات استفاده می کنه که میشه اون رو شنود کرد
برای شنود اتصالات HTTPS نیاز به کلید Session مبادله شده بین دو طرف هست. این کلید محتوای رد و بدل شده را با یک الگوریتم متقارن رمز میکنه. در HTTPS این کلید Session با استفاده از الگوریتم های نامتقارن مثل RSA رمز میشه. و بین دو طرف مبادله میشه. بعدش در ادامه اتصال داده ها با این کلید رمز میشند. برای رمزگشایی از این اطلاعات نیاز به کلید خصوصی وب سایت ارائه کننده اتصال HTTPS هست. پس چیزی که اون برنامه مورد اشاره شما دریافت میکنه، بیشتر از اونی که Wireshark میگیره نیست. داده کد شده ای که کلید رمزنگاری اش موجود نباشه و امکان شکستن رمز اون هم برای کاربر فراهم نباشه، به درد نمیخوره.



حالا با یه نرم افزار مثل Wireshark-win64-1.10.1
ولی من اینو نصب کردم ولی نمی دونم باید چیکار بکنم
خودش به اندازه کافی راهنما و مستندات داره. البته در کار با ابزاری مثل Wireshark فرض بر این هست که شما دانش ابتدایی درباره شبکه های کامپیوتری و پروتکل هایی مثل HTTP دارید. البته ابزارهای ساده تری که فقط برای پروتکل HTTP مورد استفاده قرار می گیرند در Firefox و یا Chrome وجود دارند که با استفاده از اونها می تونید اطلاعات مبادله شده بین یک سایت و مرورگر را مشاهده کنید. Wireshark نسبت به اونها ابزار پیشرفته تر و با کاربری گسترده تری هست.

tadeh2010
جمعه 15 شهریور 1392, 00:41 صبح
ببینید این رو توی کدهای دیتابیس فایرفاکس پیدا کردم که برای نگهداری یوزر و پسورد همون صفحه هستش
نمی دونم بدرد می خوره؟

<entry host="http://10.251.16.3" user="user" password="pass" formSubmitURL="" httpRealm="IDU" userFieldName="" passFieldName=""/>
و اگر بدرد بخوره چطوری ازش استفاده بکنم که کارم راه بیافته؟
مرسی

Felony
جمعه 15 شهریور 1392, 06:18 صبح
سلام ؛
پیرو بحث vcldeveloper نرم افزارهایی هستند که میتونند حملاتی نظیر MIM بزنند ( Man in the middle (http://en.wikipedia.org/wiki/Man-in-the-middle_attack) ) و با یک Certificate جعلی اطلاعات رو استخراج کنن ، مثلا Fiddler با یک Fake SSL Certificate میتونه داده های HTTPS رو استخراج کنه ؛ Fiddler خودش رو به عنوان یک Proxy برای انجام حملات MIM معرفی میکنه .

- البته این Certificate چون جعلی هست موقع ورود تو سایت های مختلف هشدارهایی هم نمایش میده ولی در هر صورت میتونه برای Sniff کردن گزینه مناسبی باشه .

- اگر دنبال اطلاعات بیشتر در مورد Fiddler هستید کتابی با نام Debugging with Fiddler هست که میتونه کمکتون کنه .

hp1361
شنبه 20 مهر 1392, 11:09 صبح
سلام

اگر صفحه مورد نظر کپچا داشته باشه و اونو از یه URL دیگه دریافت کنه، حالا چطور باید عمل کرد؟(منظورم در مورد Cookie هاست)

ممنون

tadeh2010
شنبه 20 مهر 1392, 11:33 صبح
سلام دوست عزیز
من هنوز اون مشکلم رو نتونستم حل بکنم
ولی برای موضوع کپچاپ می دونم که بایستی با کدهای Html که از کامپوننت IDHTTP بعد از گزشتن از مرحله ی مشکل من و با پردازش عکس (البته بسته به نوع کپچاپ) و یک تاکتیک که در جستجوهای فراوانی که انجام دادم در یک سایت دیدم و اون پرکردن یک edit در صفحه وب و ارسال مقادیر یا فشردن دکمه یا باتتن بود میشه اینکارو انجام داد
پیچیده بود نه؟
البته شاید دوستان راههای بهتری هم بلد باشند.
اگر به نتیجه رسیدی تو سایت بزار ما هم استفاده بکنیم
موفق باشید

hp1361
شنبه 20 مهر 1392, 11:49 صبح
سلام

من با کد زیر کپچا رو دریافت و در یک TImage نمایش میدم


procedure TForm1.lblInitClick(Sender: TObject);
var
response: TMemoryStream;
gif: TGIFImage;
html: string;
begin
html := IdHTTP.Get(URLGET);
mem.Text := html;
GetHiddenFieldValues(html);

response := TMemoryStream.Create;
gif := TGIFImage.Create;
try
IdHTTP.Get(URLIMG, response);
response.Position := 0;
gif.LoadFromStream(response);
imgCaptcha.Picture.Assign(gif);
finally
gif.Free;
response.Free;
end;
end;


اما در مورد طریقه ارسال اون و فیلدهای Hidden مشکل دارم. نمیدونم اصلا چیکار باید کرد!

tadeh2010
شنبه 20 مهر 1392, 11:53 صبح
:-)کد جالبی بود من خیلی چیزا بلد نیستم و کمی چیز یاد گرفته ام
نمیدونم
دوستان دیگه حتماکمکتان خواهند کرد
ولی بیشتر سرچ بکن
کلمات کلیدی مختلفی را در گوگل امتحان بکن
موفق باشی