Попытка опубликовать данные многочастной формы в Python, не будет публиковать
Я довольно плохо знаком с 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 ответа
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
похоже исправил это.
Попробуйте использовать библиотеку запросов. Документы по публикации многочастного файла находятся здесь: http://docs.python-requests.org/en/latest/user/quickstart/