nikolaevevge
8.04.2014 - 22:49
Здравствуйте уважаемые гуру PHP!
Задача которая кажется на первый взгляд простой, но на деле можно ли решить её стандартным функционалом PHP - я уже в сомнениях.
Допустим есть запрос POST где переменная a = 1
Единичку получаем так <?php echo $_POST["a"]; ?>
Всё просто, но теперь передадим значение вне переменной "Dopustim_takoe" (да! это возможно! Можно выполнить такое POST запрос используя Curl , fsocket или javaScrpt в браузере, поэтому просьба не уходить ответа аргументируя это бесполезным занятием).
Если прочитать что получает php функцией <?php var_dump(getallheaders()); ?> получаем примено следующее:
array(4) { ["Host"]=> string(11) "mnogomem.ru" ["Accept"]=> string(3) "*/*" ["Content-Length"]=> string(2) "14" ["Content-Type"]=> string(33) "application/x-www-form-urlencoded" } 1
Как видим из заголовков ["Content-Length"]=> string(2) "14" наши данные пришли. Но вот массив POST пуст (echo count($_POST); // 0). Так как в этом случаи получить наши данные "Dopustim_takoe" ?
Уважаемые гуру, есть ли эти данные у PHP или же Apache предоставляет php лишь разобранные данные, и с его точки зрения переменных не передано и до информации более никак не добраться?
Можно ли как то получить всю всю информацию полученную об браузера (включая заголовки + полезную нагрузку) или же толко полезную нагрузку (под ней я понимаю те самые 14 знаков которые нас интересуют)
P.S. термин Полезная нагрузка взял из Firefox именно так он называет данные если их передать таким образом (F12 -> сеть -> эмулируем POST запрос без переменных но с данными).
Надеюсь на Вашу помощь, гуру! Может быть как то через функции Apache можно решить данную проблему?
sergeiss
8.04.2014 - 23:05
Не уверен, что до конца понял, что ты хочешь... Но попробуй поработать с глобальной переменной $HTTP_RAW_POST_DATA. Она содержит ПОСТ данные в "сыром" виде, т.е. как они пришли на сервер. А в массив $_POST попадают уже разобранные данные, которые были записаны в определенном формате.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
nikolaevevge, типа такой экзотический бэкдор?
_____________
Стимулятор ~yoomoney - 41001303250491
nikolaevevge
9.04.2014 - 00:03
Спасибо за $HTTP_RAW_POST_DATA, но увы - var_dump($HTTP_RAW_POST_DATA) вернул NULL.
В документации нарыл что не работает с типом enctype="multipart/form-data" . Мне же нужно чтобы работало для любого случая.
Тем не менее поиски документации про это переменную натолкнули меня на потоки -
http://www.php.net/manual/ru/wrappers.php.php попробую разобраться и решить этим способом.
Если кто то знает ответ, пишите, решение всё ещё не найдено.
nikolaevevge
9.04.2014 - 00:10
Valick, не совсем удобно себя чувствую так, как со стажем работы с php 7 лет до сих пор не знаю что такое "бэкдор".
Я пишу обёртку для курла. Некую библиотеку способную легко конетриться, авторизироваться получать что угодно от браузера или сервера. А так же предоставлять удобные инструменты взаимодействия между ними (для организации зеркал например). Сейчас умеет распознавать автоматом кодировки, мета редиректы, содержит встроенный парсер. В общем много чего в что не даёт курл.
Об использовании такого POST запроса. Впервые увидел его на сайте букмекерской конторы Вильям Хилл. Там в таком запросе передаётся ключ безопасности, без которого в ответ не будет содержать json массива с данными.
Делать такие запросы с помощью crula библиотека уже умеет. Остаётся научить получать её такие данные от браузера. Над чем и работаю.
Цитата |
В документации нарыл что не работает с типом enctype="multipart/form-data" . Мне же нужно чтобы работало для любого случая. |
Так для этого есть
$_FILES или он тоже не подходит?
Цитата |
Некую библиотеку способную легко конетриться, авторизироваться получать что угодно от браузера или сервера. |
1) Так curl может получать HEADER отдельно. Может попробовать с ним напрямую работать? (в гугле "
php curl raw header")
2)
OAuth не подходит? Популярные крупные сервисы поддерживают почти все. Зачем свой велосипед?
nikolaevevge
9.04.2014 - 00:40
BaNru, если Вы внимательно почитаете задачу - нет не подходит. Так как мне нужно передать POSTом данные без переменной, без описании файла. Файл и переменная в POSTе близки тем что имя переменной соответствует описанию файла (тип, название), а значение переменной соответствует содержимому файла. А мне нужно передать только содержимое(вернее я его и передаю), задача была его получить. Передавая содержимое без всего (без переменных и файлов) - то есть сразу содержимое.
Вопрос можно считать закрытым. Решается через потоки
В случаи application/x-www-form-urlencoded читаем поток так
var_dump(file_get_contents('php://input')); // и получаем именно то что передавали.
А в случаи multipart/form-data я сейчас думаю что в этом нет смысла. Так как этот тип включается если передаются файлы. А значит это не описанный мной случай.
Большое спасибо sergeiss! Именно Ваш ответ натолкнул меня на нужные статьи.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.