Как мне разместить файл по HTTP, используя стандартную библиотеку Python - PullRequest
4 голосов
/ 15 августа 2011

В настоящее время я использую PycURL для запуска сборки в Jenkins путем публикации на определенный URL-адрес. Соответствующий код выглядит следующим образом:

curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
# These are the form fields expected by Jenkins
data = [
        ("name", "CI_VERSION"),
        ("value", str(version)),
        ("name", "integration.xml"),
        ("file0", (pycurl.FORM_FILE, metadata_fpath)),
        ("json", "{{'parameter': [{{'name': 'CI_VERSION', 'value':"
            "'{0}'}}, {{'name': 'integration.xml', 'file': 'file0'}}]}}".
                format(version,)),
        ("Submit", "Build"),
        ]
curl.setopt(pycurl.HTTPPOST, data)
curl.perform()

Как видите, один из параметров записи ('file0') является файлом, как указано параметром типа pycurl.FORM_FILE.

Как я могу заменить использование PycURL стандартной библиотекой Python?

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Стандартная библиотека Python не поддерживает multipart / form-data, которая требуется для файлов постов через запросы POST.

Есть несколько рецептов, например http://code.activestate.com/recipes/146306-http-client-to-post-using-multipartform-data/

1 голос
/ 15 августа 2011
u = urllib.urlopen(url, data=urllib.urlencode(
                             {'name': 'CI_VERSION', 
                              'value': str(version),
                              'file0': open(metadata_fpath).read(),
                               etc. 
                               etc.})) 

Вы можете сделать это с помощью urllib / urllib2 .Выше приведен минимальный пример отправки запроса POST.

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