Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2013 16:00:54

kappa-sama
Зарегистрирован: 2012-09-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

multipart/form-data + requests

Доброго времени суток!

Возник вопрос: никак не могу найти доступную для моего понимания информацию по multipart/form-data. google и поиск по форуму выдают достаточно много вариантов, но все примеры для файлов, да и (если честно) все равно не понятно…

Задача: Отправить сообщение на форум.

Запрос имеет вид

Хидеры:
(Request-Line) POST /post.php?tid=29 HTTP/1.1
Host testicforme.mybb.ru
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:10.0.7) Gecko/20100101 Firefox/10.0.7 Iceweasel/10.0.7
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Connection keep-alive
Referer http://site.ru/viewtopic.php?id=29
Content-Type multipart/form-data; boundary=—————————19508600615668248891146477557
Content-Length 706

пост дата
—————————–19508600615668248891146477557
Content-Disposition: form-data; name=“form_key”

048c1b58b7744cd2f5e709c97e7bd0dbddb14a7c
—————————–19508600615668248891146477557
Content-Disposition: form-data; name=“form_etc”

Netscape.::.5.0 (X11)
—————————–19508600615668248891146477557
Content-Disposition: form-data; name=“form_sent”

1
—————————–19508600615668248891146477557
Content-Disposition: form-data; name=“form_user”

Kappa
—————————–19508600615668248891146477557
Content-Disposition: form-data; name=“req_message”

Test 05
—————————–19508600615668248891146477557–

Несколько вопросов:
1)boundary
Из доступной мне к пониманию инфы это специально сформированная строка по которой разделяется инфа. Понятно что браузер ее генерирует автоматически, а как ее можно сгенерировать самому?

3) Насколько важен параметр Content-Length и как его вычислить если это не делается автоматически?

2) Все примеры которые я нашел касаются загрузки файлов. А как сформировать подобный запрос просто для данных? Если не трудно - буду рад примеру.

Офлайн

#2 Янв. 17, 2013 23:54:48

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

multipart/form-data + requests

1) Рандом. requests например использует uuid4().hex
2) Важен, обычно вычисляется автоматически
3) хз поддерживает ли requests это. Как вариант можно скормить ему и files и data, например:

requests.post('http://requestb.in/zofu92zo', data={'foo': 'bar', 'spam': 'eggs'}, files={'':''})
Вроде норм(в теч. 48 часов можно посмотреть здесь http://requestb.in/zofu92zo?inspect ), но передается лишний параметр - файл. Если твой форум это не съест, можно сформировать запрос самому, как-то так:

import requests
headers = {'Content-Type': 'multipart/form-data; boundary=e86d7460e81c40159b5cbdff0891e025'}
data = """
--e86d7460e81c40159b5cbdff0891e025
Content-Disposition: form-data; name="foo"
bar
--e86d7460e81c40159b5cbdff0891e025
Content-Disposition: form-data; name="spam"
eggs
--e86d7460e81c40159b5cbdff0891e025--"""
resp = requests.post('http://requestb.in/zofu92zo', data=data, headers=headers)



Отредактировано GaiveR (Янв. 17, 2013 23:55:29)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version