html post запрос без формы

Загрузка файла на сервер без использования формы

Со временем возникла необходимость через формы отсылать еще и файлы. Тогда консорциум W3C взялся за доработку формата POST запроса. К тому времени уже достаточно широко применялся формат MIME (Multipurpose Internet Mail Extensions — многоцелевые расширения протокола для формирования Mail сообщений), поэтому, чтобы не изобретать велосипед заново, решили использовать часть данного формата формирования сообщений для создания POST запросов в протоколе HTTP.

Главное отличие multipart/form-data от application/x-www-form-urlencoded в том, что тело запроса теперь можно поделить на разделы, которые разделяются границами. Каждый раздел может иметь свой собственный заголовок для описания данных, которые в нем хранятся, т.е. в одном запросе можно передавать данные различных типов (как в теле письма можно одновременно с текстом передавать файлы). Пример запроса:

Boundary (граница) — это последовательность байтов, которая не должна встречаться внутри передаваемых данных. Content-Length — суммарный объём, включая дочерние заголовки. Само содержимое полей при этом оставляется «как есть».

CURL, multipart/form-data

Файл get.php на сервере http://server.com:

Важный момент: на форуме PHPCLUB.RU встретил упоминание, что может потребоваться указание полного пути файла — иначе CURL выдает ошибку.

CURL, application/x-www-form-urlencoded

Файл get.php на сервере http://server.com:

Сокеты, multipart/form-data

Файл get.php на сервере http://server.com:

Сокеты, application/x-www-form-urlencoded

Файл get.php на сервере http://server.com:

Метод PUT

Описанные выше способы работают для относительно небольших файлов (примерно до 2-х мегабайт, для получения более точного значения необходимо смотреть в настройках PHP максимальный объем принимаемых данных методом POST). Чтобы обойти это ограничение, будем передавать файл методом PUT:

Источник

POST без формы + HTTP-аутентификация

ThyBzi

Новичок

POST без формы + HTTP-аутентификация

Поискал в форуме и факах, ничего подобного не нашёл.

Написал в этот раздел, так как считаю, что тема напрямую касается cURL (а ведь это, насколько я понял, одна из библиотек PECL).

Значится, суть проблемы такая. Имеем админку к сайту, в ней есть (в т.ч.) два файла: index.php, через который работает весь юзерский интерфейс (в т.ч. удаления/изменения/добавления событий в БД), и dbrw.php, который напрямую работает с БД, в зависимости от того, какие action и id (и другие данные) ему пришли по POSTу от index.php, а затем отсылает страницу обратно к index.php.

С добавлением нового события и удалением имеющегося проблем не возникает, нужные данные передаются постом от index к dbrw, выполняется соответствующий запрос, и всё путём.

Проблема возникает, когда событие нужно редактировать. Т.е.:

1) передать странице dbrw.php постом переменные action = edit и (на самом деле передаётся ещё и section, которое соответствует типу записи в БД — из какой таблицы и какие поля вытащить);
2) составить запрос на выборку имеющихся данных (полей много, и в зависимости от section их число и имена меняются);
3) и то, что собственно не получается: передать эти данные обратно index.php.

Возможные варианты решения, которые я рассматривал:

1) Передать данные GETом.
Чем плохо. Далеко не любые данные можно безопасно передать через адресную строку (особенно касается длинных текстов, в т.ч. содержащих переносы строк и др. — эти переносы потеряются, и думаю, не только они)

2) Создать форму с методом POST, в ней все значения вписать hidden-ами, а затем отправить форму средствами JavaScript.
Чем плохо. Неэлегантое решение, ибо это «выкрутасы» (или выкручивание smile. К тому же, в HTML-код страницы, которая заведомо ничего не должна показывать юзеру, выводится огромная форма. А ещё я считаю плохим стилем доверять JS выполнение важных операций.

4) Отправить данные POSTом без использования форм. Это был бы идеальный вариант. Пошарил в инете на эту тему и выяснил, что подобные вещи позволяет делать cURL…

Если вы не забыли, речь идёт об админке, соответственно там используется аутентификация (в данном случае — HTTPшная, через 401 «ошибку»). Т.е. если тупо передать нужные данные POSTом, скрипту ответят этой самой 401-й ошибкой.

Попытался совместить примеры передачи данных POSTом и HTTP-аутентификации из мануала по cURL (http://www.zend.com/pecl/tutorials/curl.php), всё равно выдаётся ошибка 401.

где:
$referer — это http-реферер smile) т.е. index.php?section=имя_раздела

BuildVarStr($data2post) — это строка «GET-вида» (var1=12&var2=345=var3=gdfgd). Самописная функция BuildVarStr() формирует такую строку из массива («var1» => 12, «var2» => 345. ). В мануале по cURL в примере используется строка именно такого вида.

Уважаемые члены сообщества! Буду весьма признателен, если укажите мне на местонахождение и суть моей ошибки в ДНК. smile) А особенно — путей исправления оной и путей решение данной задачи. Заранее благодарен.

P.S. cURL включен, разумеется. smile))

Источник

Метод POST в PHP как главное средство передачи данных на сервер

Дата публикации: 2017-02-24

100

От автора: POST сдал – POST принял! Наверное, служившие в армии подумают, что мы будем играть в войнушки. С армией у нас и так все в порядке, а вот с передачей данных в Сети не так все хорошо. Нужно знать, когда использовать метод POST в PHP, а когда GET.

Различия в примерах

Для начала создадим экспериментальную форму, с помощью которой будем тестировать оба метода. Именно формы чаще всего используются для сбора данных и пересылки их на сервер. Разметка простейшей:

1

php

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

О прикладном протоколе HTTP много говорить не буду. Упомяну лишь, что он предоставляет несколько методов для указания того ресурса, к которому направлен запрос. Чаще всего для доставки информации на сервер используются передача методом POST в PHP или GET. Метод передачи прописывается в атрибуте веб-формы method.

2

Сначала GET, а потом POST

Сначала отправляем данные с помощью GET. Поместите разметку формы и обработчик по разным файлам. Хотя можно обойтись и одним, если не прописывать атрибут action. В этом случае обработка будет происходить в этом же файле.

3

php

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Как видите, с помощью GET значения переменных передаются в URL. Что плохо, если вы пересылаете на сервер конфиденциальные данные. Теперь пробуем POST. В коде обработчика будет использовать глобальный массив _POST:

4

Мы убедились, что этот метод передает данные на сервер не через URL, а в теле запроса. Теперь разберемся, как с помощью PHP отправить POST методы.

Без форм

При передаче данных можно обойтись и без веб-форм. Следующий пример иллюстрирует, как достичь такого же эффекта средствами cURL. Думаю, разобраться вам не составит большого труда. Код первого скрипта:

Источник

Как передать переменную без формы

Я пытаюсь сохранить пользовательскую систему PHP. Я пытаюсь передать переменную на вторую страницу PHP. Ранее это делалось через форму с раскрывающимся списком:

(каким-то образом даже без закрытия тега option это все же работало)

За ними следовали отдельные кнопки, которые определяли, куда он шел
«Awardedit.php»

Однако выпадающий список — это не тот путь, когда у нас большое количество пользователей. Удобство использования не велико.

Я пытаюсь выполнить запрос к базе данных, чтобы получить список пользователей, а затем отобразить пользователей в таблице вместе с теми кнопками, с помощью которых вы можете перейти к различным разделам на сайте wonit.php.

Я знаю, как отобразить имя пользователя, чтобы показать имя пользователя, но я не знаю код для передачи через переменную.

Решение

Вот следующие решения вашей проблемы:

ПОЛУЧИТЬ :

использование ПОЛУЧИТЬ передать переменную на другую страницу:

Замечания : Теперь он становится ссылкой, когда вы нажимаете на него, чтобы он прошел ваш username переменные данные к вашему awardedit.php стр.

И тогда на этой странице вы можете поймать значение переменной, используя следующий код:

Если вы хотите сделать это таким образом, то вы можете использовать следующий способ для этого:

ПЕЧЕНЬЕ:

использование COOKIES если вы не хотите делать что-то небезопасное:

А потом принеси печенье на свой awardedit.php страница как:

Тем не менее, если вы не хотите делать это таким образом, вы можете сделать это следующим образом, и это более безопасный способ:

СЕССИИ:

Установите сессию так:

И по вашему awardedit.php страница для получения значения. Вы можете сделать это следующим образом:

Источник

Типы HTTP-запросов и философия REST

Этот пост — ответ на вопрос, заданный в комментарии к одной из моих статей.

В статье я хочу рассказать, что же из себя представляют HTTP-методы GET/POST/PUT/DELETE и другие, для чего они были придуманы и как их использовать в соответствии с REST.

Итак, что же представляет из себя один из основных протоколов интернета? Педантов отправлю к RFC2616, а остальным расскажу по-человечески :)

Этот протокол описывает взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка.

Стартовые строки для запроса и ответа имеют различный формат — нам интересна только стартовая строка запроса, которая выглядит так:

где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1).

Заголовки — это набор пар имя-значение, разделенных двоеточием. В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее.

Тело сообщения — это, собственно, передаваемые данные. В ответе передаваемыми данными, как правило, является html-страница, которую запросил браузер, а в запросе, например, в теле сообщения передается содержимое файлов, загружаемых на сервер. Но как правило, тело сообщения в запросе вообще отсутствует.

Пример HTTP-взаимодействия

Первая строка — это строка запроса, остальные — заголовки; тело сообщения отсутствует

Ресурсы и методы

Вернемся к стартовой строке запроса и вспомним, что в ней присутствует такой параметр, как URI. Это расшифровывается, как Uniform Resource Identifier — единообразный идентификатор ресурса. Ресурс — это, как правило, файл на сервере (пример URI в данном случае ‘/styles.css’), но вообще ресурсом может являться и какой-либо абстрактный объект (‘/blogs/webdev/’ — указывает на блок «Веб-разработка», а не на конкретный файл).

Тип HTTP-запроса (также называемый HTTP-метод) указывает серверу на то, какое действие мы хотим произвести с ресурсом. Изначально (в начале 90-х) предполагалось, что клиент может хотеть от ресурса только одно — получить его, однако сейчас по протоколу HTTP можно создавать посты, редактировать профиль, удалять сообщения и многое другое. И эти действия сложно объединить термином «получение».

В игру вступает REST

REST (REpresentational State Transfer) — это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) — одним из разработчиков протокола HTTP — в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP — его можно применять и в других сетях с другими протоколами. REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол — это HTTP-метод.

REST предлагает отказаться от использования одинаковых URI для разных ресурсов (то есть адреса двух разных статей вроде /index.php?article_id=10 и /index.php?article_id=20 — это не REST-way) и использовать разные HTTP-методы для разных действий. То есть веб-приложение, написанное с использованием REST подхода будет удалять ресурс при обращении к нему с HTTP-методом DELETE (разумеется, это не значит, что надо давать возможность удалить всё и вся, но любой запрос на удаление в приложении должен использовать HTTP-метод DELETE).

REST дает программистам возможность писать стандартизованные и чуть более красивые веб-приложения, чем раньше. Используя REST, URI для добавления нового юзера будет не /user.php?action=create (метод GET/POST), а просто /user.php (метод строго POST).

В итоге, совместив имеющуюся спецификацию HTTP и REST-подход наконец-то обретают смысл различные HTTP-методы. GET — возвращает ресурс, POST — создает новый, PUT — обновляет существующий, DELETE — удаляет.

Проблемы?

Да, есть небольшая проблема с применением REST на практике. Проблема эта называется HTML.

PUT/DELETE запросы можно отправлять посредством XMLHttpRequest, посредством обращения к серверу «вручную» (скажем, через curl или даже через telnet), но нельзя сделать HTML-форму, отправляющую полноценный PUT/DELETE-запрос.

Дело в том, спецификация HTML не позволяет создавать формы, отправляющие данные иначе, чем через GET или POST. Поэтому для нормальной работы с другими методами приходится имитировать их искусственно. Например, в Rack (механизм, на базе которого Ruby взаимодействует с веб-сервером; с применением Rack сделаны Rails, Merb и другие Ruby-фреймворки) в форму можно добавить hidden-поле с именем «_method», а в качестве значения указать название метода (например, «PUT») — в этом случае будет отправлен POST-запрос, но Rack сможет сделать вид, что получил PUT, а не POST.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • html css форма заявки
  • html css выравнивание по правому краю