[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Приём POST данных (непростой случай)
nikolaevevge
Здравствуйте уважаемые гуру 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
Не уверен, что до конца понял, что ты хочешь... Но попробуй поработать с глобальной переменной $HTTP_RAW_POST_DATA. Она содержит ПОСТ данные в "сыром" виде, т.е. как они пришли на сервер. А в массив $_POST попадают уже разобранные данные, которые были записаны в определенном формате.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
nikolaevevge, типа такой экзотический бэкдор?


_____________
Стимулятор ~yoomoney - 41001303250491
nikolaevevge
Спасибо за $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
Valick, не совсем удобно себя чувствую так, как со стажем работы с php 7 лет до сих пор не знаю что такое "бэкдор".

Я пишу обёртку для курла. Некую библиотеку способную легко конетриться, авторизироваться получать что угодно от браузера или сервера. А так же предоставлять удобные инструменты взаимодействия между ними (для организации зеркал например). Сейчас умеет распознавать автоматом кодировки, мета редиректы, содержит встроенный парсер. В общем много чего в что не даёт курл.

Об использовании такого POST запроса. Впервые увидел его на сайте букмекерской конторы Вильям Хилл. Там в таком запросе передаётся ключ безопасности, без которого в ответ не будет содержать json массива с данными.

Делать такие запросы с помощью crula библиотека уже умеет. Остаётся научить получать её такие данные от браузера. Над чем и работаю.
BaNru
Цитата
В документации нарыл что не работает с типом enctype="multipart/form-data" . Мне же нужно чтобы работало для любого случая.

Так для этого есть $_FILES или он тоже не подходит?

Цитата
Некую библиотеку способную легко конетриться, авторизироваться получать что угодно от браузера или сервера.

1) Так curl может получать HEADER отдельно. Может попробовать с ним напрямую работать? (в гугле "php curl raw header")
2) OAuth не подходит? Популярные крупные сервисы поддерживают почти все. Зачем свой велосипед?
nikolaevevge
BaNru, если Вы внимательно почитаете задачу - нет не подходит. Так как мне нужно передать POSTом данные без переменной, без описании файла. Файл и переменная в POSTе близки тем что имя переменной соответствует описанию файла (тип, название), а значение переменной соответствует содержимому файла. А мне нужно передать только содержимое(вернее я его и передаю), задача была его получить. Передавая содержимое без всего (без переменных и файлов) - то есть сразу содержимое.


Вопрос можно считать закрытым. Решается через потоки
В случаи application/x-www-form-urlencoded читаем поток так
var_dump(file_get_contents('php://input')); // и получаем именно то что передавали.

А в случаи multipart/form-data я сейчас думаю что в этом нет смысла. Так как этот тип включается если передаются файлы. А значит это не описанный мной случай.

Большое спасибо sergeiss! Именно Ваш ответ натолкнул меня на нужные статьи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.