Невозможно сделать запрос POST с файлами на другой сайт php

Недавно я перенес свое приложение из python2 / pylons в python3 / pyramid.

В моем приложении plyons я использовал приведенный ниже код для отправки POST-запроса на сторонний php-сайт (также поддерживается мной).

     register_openers()

datagen, headers = multipart_encode({
"biosamples_metadata": open(file_bs_md, "rb"),
"metastore": open(file_ds_md, "rb"),
"annotation-submit": "Validate Annotation Files"})

# Create the Request object
url = config['php_website_url']
request = urllib.request.Request(url, datagen, headers)
# Actually do the request, and get the response
return_text = urllib.request.urlopen(request).read()
return return_text

Этот код работал отлично. Однако на Python3, плакат не поддерживается, и я не могу использовать register_openers() что я даже не знаю, что делать.

В python3 я использую модуль запросов.

import requests
from requests_toolbelt import MultipartEncoder
url = config['php_website_url']
m = MultipartEncoder(
fields={'biosamples_metadata': open(file_bs_md, 'rb'),
"metastore":open(file_ds_md, "rb"),
"annotation-submit":  "Validate Annotation Files"}
)
request = requests.post(url, data=m)
return_text = request.text

Тем не менее, этот код не работает должным образом. Он переходит в приложение php и выполняет ту часть кода, которая должна выполняться при получении запроса.

Вот как выглядит PHP-код

      public function handle_request () {

$TEMPLATE = 'content_main';

// Process POST
if ($this->isPOST()) {
$this->_annotationFiles = array();
return $this->error_span('This is Get');
}
else ($this->isGET()) {
$this->_annotationFiles = array();
return $this->error_span('This is Post')
}

Любая помощь приветствуется

0

Решение

Я не уверен насчет вашего кода PHP, но ниже приведен правильный способ размещения файлов & данные на удаленный URL с Python 3 и запросы:

import requests
post_addr = "https://example.com/post_url"data = {
'foo': 'bar',
'foo_a': 'bar_a':
}
files = {'file': open('report.xls', 'rb')}
r = requests.post(post_addr, data=data, files=files)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]