سلام بعضی از لینک دانلودها برای دانلود یوزر و پسورد لازم دارن . تو دلفی باید چکار کرد تا یوزر و پسورد هم وارد کنه خود نرم افزار و بعد دانلود کنه ؟ اگر هم یوزر و پسورد اشتباه بود متوجه بشه اگه درست بود هم همینطور.مرسی
سلام بعضی از لینک دانلودها برای دانلود یوزر و پسورد لازم دارن . تو دلفی باید چکار کرد تا یوزر و پسورد هم وارد کنه خود نرم افزار و بعد دانلود کنه ؟ اگر هم یوزر و پسورد اشتباه بود متوجه بشه اگه درست بود هم همینطور.مرسی
این UserName و Password تو یک صفحه وب ازتون درخواست میشه ، پس باید فیلدهای موجود در اون صفحه رو توسط برنامتون پر کنید و بعد صفحه رو برای دریافت لینک دانلود اصلی ارسال کنید ، در مورد پر کردن فیلدهای یک صفحه وب هم بارها بحث شده .
مرسی با نرم افزارهای دانلود منیجر که اون لینک را دانلود می کنم خودشون یک صفحه باز میکنن و یوزر و پس میخوان من هم میخوام بدون اینکه کاربر صفحه وب را ببینه و بدون اینکه آدرس لینک را بدونه فقط با وارد کردن یوزر و پس بتونه دانلود کنه ، وضعیت هم نشون بده که آیا یوزر پس درسته یا نه
خب من فکر می کنم این یوزر پس از طریق ftp وارد میشه نه از طریق htp
چون زمانایی به این مساله بر می خوردم که داشتم با پروتکل ftp کار می کردم
<< یعنی در حقیقت این یوزر پس امنیت ftp هستش که حتا برای خواندن نیز فعال شده>>>
هم توی این سایت وسایتایی دیگه مثالا و کامپوننتایه زیادی برای کار با ftp و جود داره
اگر پرتوکولی که باهاش ارتباط بر قرار میکنید FTP هست ( که بعید میدونم ) به وسیله کامپوننت های Indy میتونید به FTP مورد نظر متصل بشید و فایل رو دریافت کنید در غیر این صورت من تا به حال برنامه DM رو ندیدم که قابلیتی که گفتید رو داشته باشه ، شاید هم من دقت نکردم .
همین IDM ، خودش پنجره را میاره و یوزر و پس میخواد
این فایل که میخوام دانلود کنم یک فایل exe هست با idftp دانلود کنم ؟ بعد یوزر و پسورد موقع دانلود میگیره ؟
سلام دوست عزيز؛
معمولاً براي چنين مواردي، از کوکیها استفاده میشه فکر میکنم.
احتمالاً دوستانی که طراحی سایت میکنند، بهتر بتونند راهنمایی کنند.
یا علی... موفق باشید...
یک وب بروزر روی صفحه گذاشتم و لینک دانلود را بهش دادم و خودش یک صفحه جدید باز کرد که یوزر و پسورد میخواست اگر بشه این صفحه را مخفی کرد و با کد نویسی فیلدها را پر کرد اونوقت مشکلم حل میشه
اگر FTP اون هاست در اختیارتون هست و User و pass رو دارید بله ولی اگر فقط یه لینک دانلود دارید خیر !این فایل که میخوام دانلود کنم یک فایل exe هست با idftp دانلود کنم ؟ بعد یوزر و پسورد موقع دانلود میگیره ؟
ربطی نداره !سلام دوست عزيز؛
معمولاً براي چنين مواردي، از کوکیها استفاده میشه فکر میکنم.
احتمالاً دوستانی که طراحی سایت میکنند، بهتر بتونند راهنمایی کنند.
یا علی... موفق باشید...
صفحه چی باز کرد ؟ اگر صفحه وب بود با همون روشی که گفتیم میتونید درستش کنید .یک وب بروزر روی صفحه گذاشتم و لینک دانلود را بهش دادم و خودش یک صفحه جدید باز کرد که یوزر و پسورد میخواست اگر بشه این صفحه را مخفی کرد و با کد نویسی فیلدها را پر کرد اونوقت مشکلم حل میشه
User و Pass مربوط به آدرس هاستی هست که فایل روی اون قرار گرفته ، شما اول باید به آدرس اصلی با نام کاربری و رمز عبور متصل بشید و بعد می تونید فایل رو توسط IdHttp یا IdFTP دانلود کنید ( هم اتصال و هم دانلود با IdHttp و IdFTP ) ، راه دیگه استفاده از WinInet هست که نیاز به ورود به هاست اصلی نیست و می تونید با داشتن لینک و رمز و نام کاربری فایل رو دریافت کنید ، اینجا یک نمونه قرار داده شده ...این فایل که میخوام دانلود کنم یک فایل exe هست با idftp دانلود کنم ؟ بعد یوزر و پسورد موقع دانلود میگیره ؟
خودتون باید در هنگام اتصال به آدرس سایت ، User و Pass رو در خصوصیات IdHttp یا IdFTP ست کنید ...بعد یوزر و پسورد موقع دانلود میگیره ؟
کوکی ها زمانی کاربرد دارن که یک بار شما توی سایت با User و Pass لاگین کنید و اطلاعات کاربریتون توسط مرورگر و به دستور سایت ! در کامپیوتر ذخیره بشه تا در دفعات بعدی اطلاعات کاربری شما از روی اون کوکی ها خونده بشه ، در غیر اینصورت کوکی ها کاربردی ندارن ...سلام دوست عزيز؛
معمولاً براي چنين مواردي، از کوکیها استفاده میشه فکر میکنم.
احتمالاً دوستانی که طراحی سایت میکنند، بهتر بتونند راهنمایی کنند.
یا علی... موفق باشید...
موفق باشید ...
مرسی من لینکی که دادین رو نگاه گردم ، لینک دانلود من http هست نه https ، سورس همون صفحه را کپی کردم تو دلفی کلی ایراد گرفت اولیش به HInternet گیر داد.
من یوزر و پس FTP را ندارم فقط هروقت لینک دانلود را به IDM میدم یا تو IE میزنم یک پنجره کوچیک باز میشه و یوزر و پس را سوال میکنه و بعد دانلود میشه
باید یونیت WinInet رو به قسمت Uses اضافه کنید ، بعد می تونید با دادن آدرس فایل ( URL ) و Userو Pass و مسیر ذخیره فایل ( FileName ) ، فایل مورد نظرتون رو دانلود کنید ...سورس همون صفحه را کپی کردم تو دلفی کلی ایراد گرفت اولیش به HInternet گیر داد
البته تا زمان دانلود شدن فایل ، برنامه Freez میشه ، ولی می تونید از یک Thread جداگانه برای دانلود استفاده کنید ، یک نمونه ی ساده ضمیمه کردم ، موفق باشید ...
مرسی بازم کار نمیکنه یعنی اجرا میشه و من یوزر و پس درست را میزنم مینویسه دانلود کامل شد اما فایل را که با نوتپد باز میکنم اینارو نوشته :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
ببینید، روش های مختلفی برای تایید مجوز دسترسی در HTTP وجود داره. اینطوری هم نیست که یکی بگه این کار رو بکن، یکی دیگه بگه اون کار رو بکن. هر سایتی مکانیزم خودش رو داره. شما باید اول تحقیق کنید، ببینید اون سایت از چه روشی برای تعیین دسترسی استفاده میکنه. یک سایت میتونه ابتدا شما رو redirect کنه به یک HTML Form، و سپس بعد از دریافت مقدار از طریق فرم، شما رو redirect کنه به لینک دانلود اصلی. یک سایت ممکنه شما به یک HTML Form تغییر مسیر بده، و داده های لازم را در یک Cookie ذخیره کنه، سپس از طریق اون Cookie دسترسی شما رو تایید کنه. یک سایت ممکنه از طریق HTTP Header این کار رو انجام بده.مرسی بازم کار نمیکنه یعنی اجرا میشه و من یوزر و پس درست را میزنم مینویسه دانلود کامل شد اما فایل را که با نوتپد باز میکنم اینارو نوشته
در مورد شما، احتمال استفاده از HTTP Header بیشتر هست. اگر استفاده از HTTP Header باشه، شما باید در هنگام ارسال درخواست، username\password رو هم به عنوان Header ارسال کنید.
می تونید وضعیت اون سایت رو با استفاده از ابزارهایی مثل WireShark بررسی کنید؛ با استفاده از WireShark می تونید داده های ارسالی در شبکه رو برای پروتکل های مختلف مانیتور کنید. کافی مانیتورینگ رو شروع کنید، و لینک مربوطه رو در مرورگرتون باز کنید، ببینید مرورگر شما username\password رو به چه صورت به سایت ارسال میکنه. شما هم همون رفتار رو با استفاده از کد انجام بدید.
وقتی مشخص شد که سایت شما داره با چه روشی مجوز رو بررسی میکنه، میشه شما رو راهنمایی کرد که چطور از اون روش استفاده کنید. وگرنه هر چیزی که اینجا گفته میشه، حدس و گمان هست.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
بله ، Wireshark یه برنامه هست که شبکه رو به وسیله WinPCap مانیتور میکنه : http://www.wireshark.org/download.htmlباید wireshark را نصب کنم
نصب کردم اجرا هم کردم .کلی رکورد نشون میده هیچی نمیشه فهمید که کدوم مال این لینک هست !
شما باید فعالیت های اضافی شبکه تون (مثل دانلود فایل و سایت و غیره) رو متوقف کنید، و بعد از اجرای عملیات مورد نظرتون، Capture را در WireShark غیرفعال کنید، و به بررسی log ایجاد شده بپردازید. می تونید داده های دریافتی را به شکل های مختلفی فیلتر کنید. مثلا در این مورد، شما فقط به داده های HTTP نیاز دارید، نه به داده های پروتکل های دیگه. در هر حال، باید راهنمای WireShark رو مطالعه کنید.نصب کردم اجرا هم کردم .کلی رکورد نشون میده هیچی نمیشه فهمید که کدوم مال این لینک هست !
در این مورد خاص، من براتون بررسی اش رو انجام دادم:
وقتی یک مرورگر لینک مربوطه رو باز میکنه، یک درخواست HTTP GET صادر میکنه.
سرور در جواب این درخواست، کد 401 رو که از نظر HTTP به معنای لزوم ارائه مجوزهای مناسب هست، برگشت میده.
وقتی شما کد 401 دریافت می کنید، باید درخواست تون رو مجددا به سرور ارسال کنید، ولی این بار باید در Header درخواست HTTP تون اطلاعات مربوط به مجوز را هم درج کنید، تا سرور بتونه مجوز شما را بررسی کنه.
اطلاعات مربوط به مجوز شما باید در یک فیلد با نام Authorization در HTTP Header قرار بگیره.
در صورتی که از IdHTTP برای دریافت فایل استفاده می کنید، خودش در صورت دریافت کد 401، یک رویداد با نام OnAuthorization رو فراخوانی میکنه. این رویداد دو پارامتر مهم داره:
Authentication؛ که اطلاعاتی درباره نوع Authentication و مقادیر پارامترهای اون رو برگشت میده، و می تونید در این رویداد مقادیر پارامترهای اون رو تغییر بدید.
Handled؛ که مشخص میکنه آیا شما پردازش تان را با موفقیت انجام دادید، یا اینکه باید عملیات مربوطه با شکست مواجه بشه.
شما باید در این رویداد به فیلدهای Username و Password از پارامتر Authorization مقدار مناسب بدید، و مقدار Handled را هم True کنید.
IdHttp تا زمان خوانده شدن متن برگشتی از سرور، درخواست جدید رو (که حاوی اطلاعات مورد نظر هست) ارسال نمیکنه. برای اینکه این کار رو به طور خودکار بعد از اجرای OnAuthorization انجام بده، باید مقدار hoInProcessAuth رو در خصوصیت HttpOptions آن True کنید. به این ترتیب، درخواست HTTP GET جدید با username\password ایی که شما دادید، به سرور ارسال میشه.
دقت کنید که همه سایت ها لزوما از این روش برای اعتبارسنجی کاربر استفاده نمی کنند. این یکی از حالت های ممکن هست.
در ضمن، اگر دلفی نوع داده TIdAuthentication رو نمیشناسه، یونیت IdAuthentication را به لیست uses یونیت خودتان اضافه کنید.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مرسی خیلی کامل بود زحمت کشیدید مرسی
من یک باتون دارم اینم کدش :
IdHTTP1.Get(URL);
این هم کد idhttp :
procedure TForm1.IdHTTP1Authorization(Sender: TObject;
Authentication: TIdAuthentication; var Handled: Boolean);
begin
Authentication.Username:=USER;
Authentication.Password:=Pass;
Handled:=True;
end;
چه یوزر و پس را درست بدم و چه اشتباه بدم هنگ میکنه hoInProcessAuth را هم True کردم
یک جوری نیاز دارم که اگر یوزر و پس اشتباه بود یا درست بود بتونم تشخیص بدم
خب، اون مشکلش به این خاطر هست که شما دارید کد رو در Thread اصلی اجرا می کنید. وقتی این کد شروع به دریافت فایل کنه، تا زمان پایان دانلود، شما عملا نمی تونید کار دیگه ایی در اون Thread انجام بدید.چه یوزر و پس را درست بدم و چه اشتباه بدم هنگ میکنه hoInProcessAuth را هم True کردم
اگر میخواید هنگ نکنه، باید به فکر ایجاد یک Thread جدید و محول کردن کار دانلود فایل به اون Thread باشید.
اگر username\password اشتباه باشه، IdHttp خودش یک Exception ارسال میکنه. شما می تونید با یک try-except و بررسی نوع کلاس Exception تولید شده، این مورد رو مدیریت کنید.یک جوری نیاز دارم که اگر یوزر و پس اشتباه بود یا درست بود بتونم تشخیص بدم
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مرسی اما اگر دفعه اول یوزر و پس اشتباه وارد بشه و پیغام خطا بده دفعه دوم اگر درست هم وارد بشه باز هم همون پیغام را میده !
من رویداد OnAuthorization را چک کردم و این رویداد فقط دفعه اول فراخوانی میشه و اگر دوباره یوزر و پس درست را هم بدی باز هم این رویداد اصلا فراخوانی نمیشه
procedure ChSerial(User:string;Pass:string);
begin
MUser:=User;
MPass:=Pass;
try
MainForm.IdHttpChSerial.Get(URL);
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
ChSerial(Edit1.Text,Edit2.Text);
end;
procedure TMainForm.IdHttpChSerialAuthorization(Sender: TObject;
Authentication: TIdAuthentication; var Handled: Boolean);
begin
Authentication.Username:=MUser;
Authentication.Password:=MPass;
Handled:=True;
end;
این فقط یوزر و پس را برای یک بار قبول میکنه ! یعنی شما دفعه دوم که روی باتون کلیک کنید دیگه اصلا یوزر و پس چک نمیشه !
یک بار که اطلاعات Authorization داده میشه، تا زمانی که IdHttp.Request از بین نرفته، یا فیلدهاش پاک نشدند، از همون اطلاعات قبلی استفاده میکنه. چک کردم، دیدم به جای اینکه مستقیما از طریق OnAuthrization مقدار بدید، می تونید از خصوصیات IdHttp.Request.UserName و IdHttp.Request.Password استفاده کنید. هر بار که میخواید فایل را دانلود کنید، قبل از فراخوانی متد Get، می تونید به این خصوصیات مقدار بدید. در این حالت، مشخصات مربوط به لاگین هر بار قبل از دریافت فایل تنظیم میشه، و مشکل شما هم برطرف میشه.این فقط یوزر و پس را برای یک بار قبول میکنه ! یعنی شما دفعه دوم که روی باتون کلیک کنید دیگه اصلا یوزر و پس چک نمیشه !
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مرسی اما بازم کار نمیکنه
من با username\password خودتون چک کردم، و بدون مشکل کار کرد، چه در صورتی که از ابتدا اطلاعات را درست وارد کنید، و چه در زمانی که اطلاعات را ابتدا اشتباه وارد کنید، و سپس اصلاح کنید.مرسی اما بازم کار نمیکنه
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
IdHttp.Request.UserName:=User;
IdHttp.Request.Password:=Pass;
try
MainForm.IdHttp.Get(URL);
except
on E : Exception do
ShowMessage(E.Message);
end;
من این را نوشتم باز هم مثل اول بود
Exception های Indy را با استفاده از این نوع از try-except ها که بدون انجام کار خاصی، همه Exception ها را خفه می کنند، خفه نکنید. Indy برای بسیاری از امورش به Exception های خودش وابسته هست.من این را نوشتم باز هم مثل اول بود
try-except شما هیچ کار خاصی انجام نمیده، صرفا یک پیغام خطا نمایش داده میشه، که بدون وجود try-except شما هم نمایش داده میشد.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
سلام دوستان بعد از n سال من هم همین مشکل را دارم
خوب من همه ی کدها را امتحان کردم ولی درست نشد
این خواهر محترم کارشون بدون نتیجه ماند؟
چی شد؟
لطفا کمکم بکنید