Форум сайта python.su
0
На моем сайте есть обработчик загрузки файла через форму (upload.php):
<html> <head> <title>Result file download</title> </head> <body> <?php if($_FILES["filename"]["size"] > 1024*3*1024) { echo ("Размер файла превышает три мегабайта"); exit; } // Проверяем загружен ли файл if(is_uploaded_file($_FILES["filename"]["tmp_name"])) { // Если файл загружен успешно, перемещаем его // из временной директории в конечную move_uploaded_file($_FILES["filename"]["tmp_name"], "./".$_FILES["filename"]["name"]); echo("File "); echo $_FILES["filename"]["name"]; echo(" loaded successfully!"); } else { echo("Error loading file"); } ?> </body> </html>
#/bin/bash # файл на локальном компьютере: FILE=~/data.txt # загрузчик на сервере: REMOTE_SITE=http/мой_сайт/upload.php echo "отправляем файл $FILE на удаленный ресурс $REMOTE_SITE" curl -X POST -F "filename=@$FILE" $REMOTE_SITE
import pycurl c = pycurl.Curl() c.setopt(c.URL, 'http://мой_сайт/upload.php') c.setopt(c.HTTPPOST, [ ('fileupload', ( # upload the contents of this file c.FORM_FILE, __file__, c.FORM_FILENAME, '/data.txt', )), ]) c.perform() c.close()
Отредактировано Alex_2057 (Фев. 18, 2016 02:25:20)
Офлайн
857
Запусти такой со своей http-ссылкой.
import pycurl c = pycurl.Curl() url = 'http://localhost:12345/cgi-bin/script.py' c.setopt(c.URL, url) c.setopt( c.HTTPPOST, [('fileupload', (c.FORM_FILE, '/etc/issue', c.FORM_FILENAME, 'data.txt'))] ) c.perform() c.close()
Офлайн
0
py.user.next
Запусти такой со своей http-ссылкой.
import pycurl c = pycurl.Curl() url = 'http://localhost/upload.php' c.setopt(c.URL, url) c.setopt( c.HTTPPOST, [('fileupload', (c.FORM_FILE, '/etc/issue', c.FORM_FILENAME, 'data.txt'))] ) c.perform() c.close()
Отредактировано Alex_2057 (Фев. 16, 2016 13:33:46)
Офлайн
857
Alex_2057Адрес твоего скрипта там должен быть.
Скрипт для localhost выглядит так, это правильно?
Alex_2057Потому что этот файл везде есть.
А почему c.FORM_FILE, ‘/etc/issue’ ?
nc -l 12345
import pycurl c = pycurl.Curl() url = 'http://localhost:12345/cgi-bin/script.py' c.setopt(c.URL, url) c.setopt( c.HTTPPOST, [('fileupload', (c.FORM_FILE, '/etc/issue'))] ) c.perform() c.close()
curl -X POST -F "filename=@/etc/issue" http://localhost:12345/cgi-bin/script.py
Отредактировано py.user.next (Фев. 16, 2016 15:20:59)
Офлайн
0
py.user.nextДа, скрипт upload.php находится в корне папки www на localhost
Адрес твоего скрипта там должен быть.
py.user.nextили обращение к моему скрипту:
url = 'http://localhost:12345/cgi-bin/script.py
url = 'http://localhost:12345/upload.php'
Отредактировано Alex_2057 (Фев. 16, 2016 17:37:09)
Офлайн
0
Делаю так. В одном окне терминала запускаю netcat:
nc -l 12345
В другом окне последовательно (поочередно)
команду:
curl -X POST -F "filename=@/etc/issue" http://localhost:12345/upload.php
import pycurl c = pycurl.Curl() url = 'http://localhost:12345/upload.php' c.setopt(c.URL, url) c.setopt( c.HTTPPOST, [('fileupload', (c.FORM_FILE, '/etc/issue'))] ) c.perform() c.close()
pi@raspberrypi ~ $ nc -l 12345
POST /upload.php HTTP/1.1
User-Agent: curl/7.26.0
Host: localhost:12345
Accept: */*
Content-Length: 229
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------ffdc1cc9aeb5
------------------------------ffdc1cc9aeb5
Content-Disposition: form-data; name="filename"; filename="issue"
Content-Type: application/octet-stream
Raspbian GNU/Linux 7 \n \l
------------------------------ffdc1cc9aeb5--
pi@raspberrypi ~ $ nc -l 12345
POST /upload.php HTTP/1.1
User-Agent: PycURL/7.25.0
Host: localhost:12345
Accept: */*
Content-Length: 231
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------66f15d0032fd
------------------------------66f15d0032fd
Content-Disposition: form-data; name="fileupload"; filename="issue"
Content-Type: application/octet-stream
Raspbian GNU/Linux 7 \n \l
------------------------------66f15d0032fd--
Отредактировано Alex_2057 (Фев. 16, 2016 18:19:18)
Офлайн
857
import pycurl c = pycurl.Curl() url = 'http://localhost:12345/upload.php' c.setopt(c.URL, url) c.setopt( c.HTTPPOST, [('filename', (c.FORM_FILE, '/etc/issue'))] ) c.perform() c.close()
Офлайн
0
Изменил.
Получилось!
Ура! Все работает, локально и на сайте.
Возможно в первоисточнике на оф. сайте что-то напутано.
py.user.next
Большое Вам спасибо за помощь! Удачи и успехов!
Отредактировано Alex_2057 (Фев. 17, 2016 14:24:56)
Офлайн