View Full Version : ارسال پارامترها با متد Post به یک URL
سیدجواد
سه شنبه 26 آبان 1394, 16:18 عصر
سلام
یه وبلاگ تو Blog.ir دارم. میخوام یه برنامه تحت دسکتاپ بنویسم که چند تا تکست باکس داشته باشه، مثلا عنوان؛ کلمات کلیدی؛ متن و ... به نحوی اون تکست باکسا پر شن و سپس با زدن یک دکمه، برنامه، بر اساس محتویات تکست باکسا، یه پست جدید به وبلاگ اضافه کنه.
تو بحث GUIش که مشکل چندانی ندارم. منتها تو حوزه وب بشدت تازه کارم و اطلاع چندانی ندارم.
الان دو تا سؤال دارم:
1- چه طوری میتونم بفهمم چه پارامترهایی رو باید با post به blog.it بفرستم
2- با چه تابعی و چطوری باید این پارامترها رو بفرستم؟
البته یه پست همینطوری تو بلاگ ساختم و با inspect Element خود فایرفاکس بررسیش کردم ولی چیز زیادی دستگیرم نشد. عکسش رو میتونید این پایین ببینید.
136859
سعی کردم قابل فهم توضیح بدم؛ اما اگه باز جاییش قابل فهم نیست، بگید تا بیشتر توضیح بدم. ممنون
ahmad156
سه شنبه 26 آبان 1394, 22:15 عصر
در مورد سوال اولتون شما میتونین با fiddler (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCcQFjABahUKEwjs0dCAlpjJAhVBYQ8KHXIYBao&url=http%3A%2F%2Fwww.telerik.com%2Ffiddler&usg=AFQjCNGY5eqyh8uRUDSYsPDDbTNL4aUgVw&sig2=-RLehs6Ahaptk6vkokVlDw&cad=rja)چک کنین که چه پارامترهایی نیاز هست
در مورد سوال دومتون هم شما میتونین از urllib (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CBwQFjAAahUKEwjzytadlpjJAhWDJQ8KHX_iAe8&url=https%3A%2F%2Fdocs.python.org%2F2%2Flibrary%2F urllib.html&usg=AFQjCNF2USVu-XGgS4Wx_LUSndwil4C_cw&sig2=O20cMpdpCUF-J4RURAwDVw&bvm=bv.107467506,d.ZWU)و urllib2 (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CBwQFjAAahUKEwiExbemlpjJAhWBdw8KHSU0ANg&url=https%3A%2F%2Fdocs.python.org%2F2%2Flibrary%2F urllib2.html&usg=AFQjCNEtFOgH4n5UiS7DGahAH8I0zGkqWQ&sig2=ksclKUx-WzE9ZpfxsIBzUw&bvm=bv.107467506,d.ZWU)استفاده کنین
َAhmad Hamzeei
سه شنبه 26 آبان 1394, 22:33 عصر
1. برای فهمیدن پارامترها همون جایی که خودتون رفتید هستش تو تب params:
136864
مثلا من با نام ahmad و پسورد mysecretpassword لاگین کردم.
پارامترها مشخصه دیگه، username و password و next و csrf_token هستند.
پارامتر csrf_token رو باید از توی html دربیارید، که هر دفعه با رفرش عوض میشه:
<input id="csrf_token" name="csrf_token" type="hidden" value="1447791712##3c806ed0f23d465ae7c7f0909bb845071645f4 c0">
برای جلوگیری از حمله Cross-Site Request Forgery هستش.
برای درآوردنش از توی html از کتابخونه beautifulsoup4 می تونید استفاده کنید و تگ input با id برابر csrf_token رو سرچ کنید.
2. از کتابخونه requests باید استفاده کنید، اینطوری:
from requests import session
payload = {
'username': 'ahmad',
'password': 'mysecretpassword',
'next': '',
'csrf_token': 'extracted_from_html',
}
with session() as req:
r = req.post('http://bayan.ir/service/blog/', data=payload)
# new post here
چون بعد از لاگین باید cookie ها رو داشته باشید تا سایت بفهمه لاگین کردید از session در کد بالا استفاده شده.
بعد دیگه لاگین میشید و میتونید با req.post پست بزنید.
سیدجواد
سه شنبه 26 آبان 1394, 22:55 عصر
1. برای فهمیدن پارامترها همون جایی که خودتون رفتید هستش تو تب params:
136864
مثلا من با نام ahmad و پسورد mysecretpassword لاگین کردم.
پارامترها مشخصه دیگه، username و password و next و csrf_token هستند.
پارامتر csrf_token رو باید از توی html دربیارید، که هر دفعه با رفرش عوض میشه:
<input id="csrf_token" name="csrf_token" type="hidden" value="1447791712##3c806ed0f23d465ae7c7f0909bb845071645f4 c0">
برای جلوگیری از حمله Cross-Site Request Forgery هستش.
برای درآوردنش از توی html از کتابخونه beautifulsoup4 می تونید استفاده کنید و تگ input با id برابر csrf_token رو سرچ کنید.
2. از کتابخونه requests باید استفاده کنید، اینطوری:
from requests import session
payload = {
'username': 'ahmad',
'password': 'mysecretpassword',
'next': '',
'csrf_token': 'extracted_from_html',
}
with session() as req:
r = req.post('http://bayan.ir/service/blog/', data=payload)
# new post here
چون بعد از لاگین باید cookie ها رو داشته باشید تا سایت بفهمه لاگین کردید از session در کد بالا استفاده شده.
بعد دیگه لاگین میشید و میتونید با req.post پست بزنید.
توضیح کاملی بود. ممنون از شما
َAhmad Hamzeei
پنج شنبه 28 آبان 1394, 21:41 عصر
اینم کدی که به کمک سیدجواد (http://barnamenevis.org/member.php?366788-%D8%B3%DB%8C%D8%AF%D8%AC%D9%88%D8%A7%D8%AF) نوشته شده:
(https://gist.github.com/AhmadHamzeei/9af7aa6efc87854d3061)
https://gist.github.com/AhmadHamzeei/9af7aa6efc87854d3061
(https://gist.github.com/AhmadHamzeei/9af7aa6efc87854d3061)
136902 (https://gist.github.com/AhmadHamzeei/9af7aa6efc87854d3061)
سیدجواد
شنبه 30 آبان 1394, 07:18 صبح
ممنون از شما. شما اینقدر خوب جواب میدین که آدم رو وسوسه میکنید، سؤالای پیچیده تر و وقت گیرتر هم ازتون بپرسه!
اگر فرصت کردین، یه توضیحی هم راجع به ارسال فایل به صندوق بیان (https://bayan.ir/service/bayanbox/) بدید. اون جا رو من هرچی کردم، نفهمیدم چجوری میشه، از طریق کد، یک فایل رو فرستاد. یک سری پارامترها رو میفرسته که من هرچی کردم نفهمیدم این پارامترها از کجا میان و چجوری تولید میشن.
ممنون از شما
سیدجواد
شنبه 28 آذر 1394, 00:50 صبح
ممنون از شما. شما اینقدر خوب جواب میدین که آدم رو وسوسه میکنید، سؤالای پیچیده تر و وقت گیرتر هم ازتون بپرسه!
اگر فرصت کردین، یه توضیحی هم راجع به ارسال فایل به صندوق بیان (https://bayan.ir/service/bayanbox/) بدید. اون جا رو من هرچی کردم، نفهمیدم چجوری میشه، از طریق کد، یک فایل رو فرستاد. یک سری پارامترها رو میفرسته که من هرچی کردم نفهمیدم این پارامترها از کجا میان و چجوری تولید میشن.
ممنون از شما
سلام
مثل اینکه جناب حمزه ای فرضت نمیکنن در این زمینه توضیح بدن؛ لطفا اگه از دوستان دیگه کسی اطلاع داره جواب بده. البته قبلش من یکم مسأله رو بازتر میکنم:
سایت بلاگ (یا در اصل بیان) یه صندوق داره که صاحبان وبلاگ میتونن فایلهاشون رو اونجا آپلود کنن. حالا من میخوام اون کد قبلی رو (که جناب حمزه ای زحمتشو کشیدن) طوری تکمیل کنم که خودش آدرس فایل رو بگیره و اون رو آپلود کنه تو صندوق (که این فایل یا عکسه و یا صوت)
آدرس صندوق بیان اینه:
https://bayan.ir/service/bayanbox/
خب من یه بررسیش کردم، دیدم برا آپلود فایل یه دستور get میفرسته و بعد بسته به حجم فایل چند تا post.
حالا این وسط چند تا مشکل وجود داره.
مشکل اول اینه که اون دستور get یه سری پارامترها داره که نمیدونم از کجا میاردشون. هر چی سورس صفحات رو چک کردم، پیداشون نکردم. این پارامترهای نامشخص تو عکس زیر معلومه:
137519
مثلا پارامتر callback دو مقدار عددی داره (قبل از _ و بعد از اون) که مقدار اول در طول هر بار لاگین ثابته اما مقدار دوم برا هر فایل فرق میکنه!
مشکل دوم، بحث post هست که علاوه بر داشتن یه سری پارامترهایی که نمیدونم چین و از کجا اومدن، قیافه پارامترهاش هم با اونچه در مورد قبل بود کاملا متفاوته:
137520
اگه بتونید در این زمینه هم راهنمایی کنید، خیلی ممنون میشم.
ASedJavad
چهارشنبه 02 دی 1394, 16:03 عصر
سلام
اگه مشکلت فقط همینه، بنظرم بد نباشه بجای اینکه خودت رو درگیر این مفاهیم کنی (که البته یادگیریش در هر صورت مفیده و امکان داره بعدا هم به دردت بخوره) بیا یه روش راحت تر رو امتحان کن و از یه مرورگر embed شده تو برنامت استفاده کن (مثلا QWebView) و عملیات تکمیل فرم و ارسال اطلاعات رو تو اون شبیه سازی کن.
این جوری فکر کنم مشکلاتت خیلی کمتر باشه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.