PDA

View Full Version : سوال: ارسال درخواست به سرور با پروتکل POST HTTPs و دریافت پاسخ



Mohammado1369
جمعه 07 شهریور 1399, 17:59 عصر
سلام دوستان
من میخوام با سی شارپ یه برنامه بنویسم که مثل مروگر بتونم به سرور یه سایت که پروتکل HTTPS داره درخواست POST بفرستم و جواب مناسب رو دریافت کنم. درخواست هایی که لازمه به سایت بفرستم و همچنین Response سرور رو دارم. فقط چون تازه شروع به کار با شبکه کردم، کار کردن باهاشون برام مشکله. میخواستم اگه امکان داشته باشه راهنماییم کنین.
اول اینکه وقتی به سرور URL صفحه Login رو میدیم آیا سرور در Response که میفرسته کلید رمزی خاصی در Header داره ؟ چون تو Body چیزی نداره.
دوم من وقتی با WebRequest (https://docs.microsoft.com/en-us/dotnet/api/system.net.webrequest) میخوام درخواست ایجاد کنم، request بعضی فیلد هایی که برای Header لازم دارم رو پیدا نمیکنم. مثل Accept type اگه بگین که چطوری میتونم تمام خواص Header رو تعریف کنم ممنون میشم.
در کل اگه بتونین از اول تا آخر بصورت مرحله به مرحله برام توضیح بدین که چکار کنم و چه مواردی لازم دارم ممنون میشم (لازم نیس حتما کد باشه) همین که توضیح بدین هم کافیه هر چند با کد بهتره:لبخند:
با تشکر.

مهدی کرامتی
یک شنبه 09 شهریور 1399, 21:08 عصر
قبل از اینکه اقدام به کدنویسی برای پیاده سازی هدف تون کنید میبایست با روال تبادل اطلاعات با سایت مورد نظر آشنا شوید.

برای کسب اطلاعات فوق، یکبار کل مراحل رو با استفاده از نرم افزاری مثل Http Debugger یا Fiddler بررسی کنید و ببینید در هر مرحله چه چیزی ارسال می شود و چه دریافت می شود.

Mohammado1369
سه شنبه 11 شهریور 1399, 08:35 صبح
قبل از اینکه اقدام به کدنویسی برای پیاده سازی هدف تون کنید میبایست با روال تبادل اطلاعات با سایت مورد نظر آشنا شوید.

برای کسب اطلاعات فوق، یکبار کل مراحل رو با استفاده از نرم افزاری مثل Http Debugger یا Fiddler بررسی کنید و ببینید در هر مرحله چه چیزی ارسال می شود و چه دریافت می شود.

مرسی از جوابتون
من خودم با Fiddler بسته های Request / response رو قبلا پیدا کردم. ولی چون تازه کارم یه سری مشکل در خصوص اینکه چطوری ارتباط رو با سرور شروع کنم دارم. مثلا وقتی Url سایت رو تو مرورگر میزنم یه سری عدد در مبنای HEX با استفاده از (Tunnel TO) میفرسته مثل:




A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.
Version: 3.3 (TLS/1.2)Random: E1 AD 60 CB AC AF 3B DE 65 AC 5C 93 A9 3A B6 31 B6 03 A4 9B CB 27 95 EF 78 28 B2 3B 1D C7 02 14
"Time": 27/11/1456 04:03:38 ق.ظ
SessionID: D9 1A 03 00 08 5E 48 BE 68 CB 97 57 83 1B 4C ED 29 49 DB D3 04 D5 05 06 8B 21 F4 EC EB AB EA B0

Extensions:
grease (0xeaea) empty


[1301] TLS_AES_128_GCM_SHA256

اینکه آیا لازمه من هم این بسته ها رو بفرستم؟ اگه لازمه مرورگر بر چه اساسی اونارو میسازه؟ چون پروتکل HTTPs هست باید یه کلید رمزگذاری بین Client /server ایجاد بشه اون کلید رو چطوری بدست بیارم؟
اگه اینا رو بدونم اونوقت میشه با ارسال Request مناسب کارایی که میخوام رو انجام بدم.
با تشکر

مهدی کرامتی
سه شنبه 11 شهریور 1399, 19:36 عصر
خیر، نیاز نیست شما هم این اطلاعات رو تبادل کنید، چون Handshake و سایر پروسه های مرتبط با https به صورت خودکار توسط کلاس مورد استفاده تون برای ارتباط انجام میشه.
شما فقط باید ببینید چه اطلاعاتی در سطح فرم و پاسخش تبادل میشه.

Mohammado1369
چهارشنبه 12 شهریور 1399, 13:00 عصر
خیر، نیاز نیست شما هم این اطلاعات رو تبادل کنید، چون Handshake و سایر پروسه های مرتبط با https به صورت خودکار توسط کلاس مورد استفاده تون برای ارتباط انجام میشه.
شما فقط باید ببینید چه اطلاعاتی در سطح فرم و پاسخش تبادل میشه.
یعنی من الان با استفاده از HttpWebRequest به URL سایت که پروتکل HTTPs داره. یه Request با header و body مناسب بفرستم کافیه؟ اونوقت برا درخواست های بعدی( بعد از login) چطوری خودمو بهش بشناسونم؟

مهدی کرامتی
چهارشنبه 12 شهریور 1399, 14:15 عصر
یعنی من الان با استفاده از HttpWebRequest به URL سایت که پروتکل HTTPs داره. یه Request با header و body مناسب بفرستم کافیه؟ اونوقت برا درخواست های بعدی( بعد از login) چطوری خودمو بهش بشناسونم؟
بله. ریکوئست رو بفرستید، بقیه اش هندل میشه.

در پاسخ درخواست شما معمولا یک توکن یا کوکی تحویل تون میده، اون رو باید سیو کنید و به عنوان ضمیمه در درخواست های بعدی بفرستید.

the king
چهارشنبه 12 شهریور 1399, 14:16 عصر
یعنی من الان با استفاده از HttpWebRequest به URL سایت که پروتکل HTTPs داره. یه Request با header و body مناسب بفرستم کافیه؟ اونوقت برا درخواست های بعدی( بعد از login) چطوری خودمو بهش بشناسونم؟

معمولا اول صرفا صفحه لاگین رو درخواست می کنید، نه Username ای و نه Password ای رو ارسال نمی کنید. در Header ئه Response ای که برمیگردونه یا شاید در Cookie هایی که Response داره، مقادیری بر میگردونه که در ارسال بعدی که برای لاگین انجام می دهید همراه username و password اون مقادیر باید در Header یا Cookie درخواست تون باشه، یعنی درخواست خالی کافی نیست و باید مقادیری که از صفحه اول دریافت کرده بودید رو در Header یا Cookies درج کنید. اگر لاگین موفقیت آمیز باشه در Response بهتون session id یا هر مقدار دیگری رو برمیگردونه که باید در کل Request های بعدی حتما درج بشه تا همچنان به عنوان اون کاربر لاگین شده قبول تون کنه.