Попытка опубликовать данные нескольких частей формы в Python, не будет публиковать - PullRequest
4 голосов
/ 27 июля 2011

Я довольно новичок в python, поэтому заранее прошу прощения, если я упускаю что-то простое.Я пытаюсь опубликовать данные в многочастной форме в Python.Скрипт запускается, но не публикуется.Я не уверен, что я делаю не так.

import urllib, urllib2
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers

def toqueXF():
    register_openers()
    url = "http://localhost/trunk/admin/new.php"
    values = {'form':open('/test.pdf'),
              'bandingxml':open('/banding.xml'),
              'desc':'description'}
    data, headers = multipart_encode(values)
    request = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(request)
    the_page = response.read()
    print the_page

Когда я вызываю это, печать дает мне HTML-код страницы, как будто я запустил «urllib2.urlopen (url)» и не сделалНе публиковать какие-либо данные:

<form enctype="multipart/form-data" action="" method="post">
    <p><input type="hidden" name="MAX_FILE_SIZE" value="1000000000" /></p>
    <p>Select PDF file to create form from: <input name="form" type="file" /></p>
    <p>(Optional): Select banding XML file: <input name="bandingxml" type="file" /></p>
    <p>Enter description of form: <input name="desc" type="text"/><br/></p>
    <p><input type="submit" value="Upload form" /></p>
</form>

Постер предназначен для кодирования данных в многочастные данные / формы и может быть найден здесь: http://atlee.ca/software/poster/index.html

Я нашел код для использования постера здесь: Использование MultipartPostHandler для POST-данных формы с Python

Если кому-то интересно, я пытаюсь автоматически опубликовать файл полос в формате pdf и xml после того, как они сгенерированы для queXF (оптическая метка с открытым исходным кодомпрограммное обеспечение для распознавания).http://quexf.sourceforge.net/

Ответы [ 2 ]

1 голос
/ 28 июля 2011
import urllib, urllib2
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers

def queXF():
    register_openers()
    url = "http://lilix2/trunk/admin/new.php"
    values = {'form':open('test.pdf'),
          'bandingxml':open('banding.xml'),
          'desc':'description'}
    data, headers = multipart_encode(values)
    headers['User-Agent'] = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    request = urllib2.Request(url, data, headers)
    request.unverifiable = True
    response = urllib2.urlopen(request)
    the_page = response.read()

Добавление headers['User-Agent'] и request.unverifiable = True, кажется, исправило это.

0 голосов
/ 21 декабря 2012

Попробуйте использовать библиотеку запросы . Документы по публикации многочастного файла находятся здесь: http://docs.python -requests.org / ru / latest / user / quickstart / # post-a-multipart-закодированный файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...