Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Как в отправить "multipart/form-data" в requests [RSS Feed]

#1 Сен. 12, 2012 01:12:57

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

Хочу для одного форума настроить автоматический постинг.
Вот что проснифил в отправляемом браузером сообщении (без заголовеов):

-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="editId"
-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="parentid"
0
-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="topicid"
1822066
-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="userId"
16856
-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="title"
0
-----------------------------37827316415720266761686078786
Content-Disposition: form-data; name="message"
 *[s2_246.gif]* 
-----------------------------37827316415720266761686078786--
Данные отправляются с помощю “multipart/form-data”
Сам текст какой нужен я сгенерирую но как “ето” запаковать в “multipart/form-data” (конкретно в requests)

Офлайн

#2 Сен. 12, 2012 15:03:47

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

http://www.google.com/search?q=python+%22requests%22+multipart+post

http://stackoverflow.com/questions/12385179/how-to-send-a-multipart-form-data-with-requests-in-python

Вообще, конечно, по-дурацки сделано. Надо было это указать явно.

Офлайн

#3 Сен. 13, 2012 13:24:12

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

Спасибо за ссылку

odnochlen
http://stackoverflow.com/questions/12385179/how-to-send-a-multipart-form-data-with-requests-in-python
Очень приятно, так как этот вопрос на stackoverflow тоже я задал.
Правда пока не дошли руки попробовать.

Офлайн

#4 Сен. 14, 2012 23:00:00

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

Когда формирую запрос таким способом

tt = secondby_bot.post(urlbase[:-1] + topicidlink, files=dict(editId='', parentid='0', topicid=topicid, userId=userid, title='0', message='*[s2_246.gif]* '))
то при снифинге вижу такое:
Content-Type: multipart/form-data; boundary=cb17d41241624beabee5e3cb002e5e62....--cb17d41241624beabee5
  e3cb002e5e62..Content-Disposition: form-data; name="topicid"; filename="topicid"..Content-Type: application/octet-stream....1822066..--cb17d41241624beabee5e3cb002e5e62..Conten
  t-Disposition: form-data; name="editId"; filename="editId"..Content-Type: application/octet-stream......--cb17d41241624beabee5e3cb002e5e62..Content-Disposition: form-data; nam
  e="parentid"; filename="parentid"..Content-Type: application/octet-stream....0..--cb17d41241624beabee5e3cb002e5e62..Content-Disposition: form-data; name="message"; filename="m
  essage"..Content-Type: application/octet-stream....*[s2_246.gif]* ..--cb17d41241624beabee5e3cb002e5e62..Content-Disposition: form-data; name="title"; filename="title"..Content
  -Type: application/octet-stream....0..--cb17d41241624beabee5e3cb002e5e62..Content-Disposition: form-data; name="userId"; filename="userId"..Content-Type: application/octet-str
  eam....16856..--cb17d41241624beabee5e3cb002e5e62
тоесть вопрос открыт
На stackoverflow.com также подсказки не дали.

Офлайн

#5 Апрель 9, 2013 12:16:38

omatic
Зарегистрирован: 2013-03-24
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

agryn, решили как-то вопрос? Тоже столкнулся с передачей multipart/form-data в requests и нигде немогу найти примера как правильно передать. Может у Вас найдутся заготовки?

P.S. для себя решил задачку таким способом: в data добавил словарь с данными для отправки в формы, и вставил пустой атрибут files, тогда отправляются multipart/form-data:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
def main():
	postdata = {
		"TopicTitle" : 'test',
		"TopicDesc" : 'test',
		"Post" : 'test'
	}
	headers = {
		'User-Agent' : 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0',
		'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language' : 'en-US,en;q=0.5',
		'Accept-Encoding' : 'gzip, deflate'
	}
	s = requests.Session()
	q = s.post('http://forum.com/index.php?', headers=headers, data=postdata, files={'':''})
if __name__ == '__main__':
    main()

Отредактировано omatic (Апрель 10, 2013 13:00:17)

Офлайн

#6 Авг. 4, 2016 19:50:15

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Как в отправить "multipart/form-data" в requests

Посмотрите на VirusTotal, там есть Public API с приемом файлов в multipart/form-data encoding. При этом надо пересылать токен. Вот так Я решил задачу через requests:

 #-*- coding: utf-8 -*-
import requests
file_scan_url = "https://www.virustotal.com/vtapi/v2/file/scan"
apikey = "--- ENTER YOUR API KEY ---"
def scan_files(scan_url):
     files = [('file', ('sample.txt', open('sample.txt', 'rb'))),
               ('file', ('sample2.txt', open('sample2.txt', 'rb')))]
     return requests.post(scan_url, data={'apikey':apikey}, files=files)

Это тестовый уродливый скриптик, далее уже всё пристроено как надо. Но, вот что с pdb получаем:
 (Pdb) resp = scan_files(file_scan_url)
(Pdb) resp
<Response [200]>
(Pdb) resp.text
u'{"scan_id": "27d2315007c22348f8296eea3e2c9398d113c6101382198bc72e5eff9d890754-1470328055", "sha1": "d35926bd15d15309464d773d258d2deb3de664d6", "resource": "27d2315007c22348f8296eea3e2c9398d113c6101382198bc72e5eff9d890754", "response_code": 1, "sha256": "27d2315007c22348f8296eea3e2c9398d113c6101382198bc72e5eff9d890754", "permalink": "https://www.virustotal.com/file/27d2315007c22348f8296eea3e2c9398d113c6101382198bc72e5eff9d890754/analysis/1470328055/", "md5": "7b9ea15294d153f42e30adff30cf503e", "verbose_msg": "Scan request successfully queued, come back later for the report"}'

Может быть, это вам как-то поможет. П.С. в каждом тупле первый элемент ‘file’ - ибо именно так называется нужное поле для приема тем сервисом (см. документацию).
Ах, ещё прикол - VirusTotal таки принимает по одному файлу за раз, поэтому оно приняло как раз последний файл. Но, всё же, оно прошло.

п.с. напомните пожалуйста, почему на форуме всегда первая строка кода сдвигается вправо на один символ и как сделать пробелы между строками



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Авг. 4, 2016 20:19:06)

Офлайн

  • Начало
  • » Web
  • » Как в отправить "multipart/form-data" в requests[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version