Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Отправка файла через post, не удается нормально отправить картинку [RSS Feed]

#1 Янв. 7, 2010 17:40:10

skyman
От:
Зарегистрирован: 2010-01-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Искал что то похожее по всему интернету так и не нашел. Проблема следующая, пытаюсь отправить картинку через post запрос.

    data = open("kartinka.jpg", 'rb').read()
# разделитель для данных
boundary = '----------OmNaOmNaOmNamo'
# тело HTTP-запроса
body = '''--%s
Content-Disposition: form-data; name="method"
post
--%s
Content-Disposition: form-data; name="key"
213453243244
--%s
Content-Disposition: form-data; name="file"; filename="kartinka.jpg"
Content-Type: image/pjpeg
%s
--%s--
''' % (boundary, boundary, boundary, data, boundary)

# заголовки HTTP-запроса
headers = {'Content-type': 'multipart/form-data; boundary=%s' % boundary}
# подключение к HTTP-серверу
h = http.client.HTTPConnection('adress.com')
# посылка запроса
h.request("POST", "/in.php", body, headers)
# получение и анализ ответа HTTP-сервера
resp = h.getresponse()
data = resp.read()
h.close()
Картинка считывается и отправляется в следующем виде:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00>CREATOR: gd-jpeg v1.0 ……..'
На сервере она сохраняется естественно так же. Помогите исправить, второй день голову ломаю :(



Офлайн

#2 Янв. 7, 2010 19:44:03

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

я думаю не надо превращать данные в строку: “%s” % data,
может попробовать просто: body += data

а ещё я бы прочел бы пост-запрос от нормального браузера, посмотреть какой он должен быть нормальный.

и я думаю есть штатные средства для формирования post запроса, может cgi, он вроде разбирает пост запросы, может и собирать умеет

Отредактировано (Янв. 7, 2010 19:44:41)

Офлайн

#3 Янв. 7, 2010 22:02:07

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

skyman

Во-первых по стандарту все переводы строк должны быть ‘\r\n’, лучше указать их явно.
Во-вторых у тебя неверный формат данных - после boundary ‘\r\n’, после каждого заголовка ‘\r\n’, после последнего заголовка два ‘\r\n’, а не один - как у тебя.

--boundary\r\nContent-Disposition: form-data; name="file"; filename="kartinka.jpg"\r\nContent-Type: image/pjpeg\r\n\r\ndata\r\n--boundary\r\n



Отредактировано (Янв. 7, 2010 22:02:40)

Офлайн

#4 Янв. 7, 2010 23:28:52

skyman
От:
Зарегистрирован: 2010-01-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Видимо тег code убрал лишние переносы строк, с самим запросом все нормально, он передает все нужные поля в нужном виде. Посоветовали собрать весь запрос в bytes (_ttp://forum.vingrad.ru/forum/topic-286468/kw-post-%D1%84%D0%B0%D0%B9%D0%BB.html), или не получилось или не помогло…продолжаю думать



Офлайн

#5 Янв. 8, 2010 00:20:42

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

http://www.w3.org/TR/html401/interact/forms.html
Листайте в самый низ, последний пример - ваш (см. заголовок Content-Transfer-Encoding).



Офлайн

#6 Янв. 8, 2010 11:34:14

skyman
От:
Зарегистрирован: 2010-01-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Не помогло, хотя впринципе должно было заработать ( сервер все равно сохраняет изображение в файл в следующем виде:

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality…'



Офлайн

#7 Янв. 8, 2010 12:15:16

skyman
От:
Зарегистрирован: 2010-01-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

УРА!!! :) сделал, помогло:

data = data.decode("unicode_escape")



Офлайн

#8 Янв. 8, 2010 12:27:33

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Это не верно, похоже на метод тыка… помогло - не помогло…

Можешь сделать print(repr(body)) сюда? И хорошо бы указывать версию питона заранее, если речь идёт о 3-м питоне.



Офлайн

#9 Янв. 8, 2010 12:30:32

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Вот в чём проблема (возможно не единственная):

>>> '-- %s --' % b'test'
"-- b'test' --"



Отредактировано (Янв. 8, 2010 12:33:21)

Офлайн

#10 Янв. 8, 2010 12:59:32

skyman
От:
Зарегистрирован: 2010-01-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через post, не удается нормально отправить картинку

Это не верно, похоже на метод тыка… помогло - не помогло…
мб, но мне надо было отправить файл в таком виде в каком он хранится на диске, а питон его преобразовывал в bytes и отсылал так как ему хотелось, притом отсылал и вместе с буквой b перед началом переменной :)

Python 3.1.1

Можешь сделать print(repr(body)) сюда?
не получилось:
UnicodeEncodeError: ‘charmap’ codec can't encode characters in position 352-355: character maps to <undefined>
Вот в чём проблема (возможно не единственная):
не понял ( если ты про сам запрос то с ним все в порядке, тут просто его тег code немного отформатировал



Офлайн

  • Начало
  • » Network
  • » Отправка файла через post, не удается нормально отправить картинку[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version