2015-04-30 2 views
0

У меня есть скрипт GAE PHP, который принимает сообщение POSTED, состоящее из $_POST['version_name'], $_POST['version_comments'] и $_FILES['userfile']['tmp_name'][0].POST-файл для PHP из Python

Он запускает file_get_contents против $_FILES['userfile']['tmp_name'][0] и хранит двоичный файл в базе данных CloudSQL.

Это конечная точка для формы, основанной на PHP, поэтому пользователи могут загружать новые версии (с именами/комментариями) через дружественный графический интерфейс из своего браузера. Он работает нормально.

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

r = requests.post('http://handler_url_here/', 
data={'version_name': "foo", 'version_comments': "bar"}, 
files={'userfile': open('version_archive.tar.gz', 'rb')}) 

version_archive.tar.gz не является пустым файлом, но file_get_contents($_FILES['userfile']['tmp_name'][0]) возвращается нулем. Загрузка файлов немного сложна с помощью GAE, поэтому я бы предпочел не изменять прослушиватель - есть ли способ заставить Python отправлять свою полезную нагрузку в том же формате, который ожидает слушатель?

$_POST['version_name'] и $_POST['version_comments'] работают должным образом.

+0

может быть что-то о кодировке строк? У меня были некоторые проблемы в прошлом с ними –

+0

Вы используете «php55» runtime и прямую загрузку файлов? Подробнее см. Http://stackoverflow.com/questions/29807050/upload-file-android-to-google-app-engine-php/29808939#29808939. – Mars

ответ

1

Я бы начал с рассмотрения среднего человека, который в этом случае является HTTP-запросом. Имейте в виду, что ваш скрипт Python не отправляет непосредственно в PHP; он делает HTTP POST-запрос, который затем получает интерпретируемый PHP в переменные $ _POST и еще что-то.

Выясните способ «захвата» или «сброса» HTTP-запроса, отправляемого Python, чтобы вы могли проверить его содержимое. (Вы можете найти ряд бесплатных инструментов, которые помогут вам сделать это различными способами. Чтение HTTP-запроса должно быть довольно понятным, если вы знакомы с работой с переменными $ _GET и $ _POST в PHP.) Затем отправьте якобы идентичный запрос от PHP, захват HTTP-запроса и определение того, как и почему они отличаются.

Удачи вам!