- Как создать GET POST запросы с помощью PHP
- Пояснение кода
- Использование file_get_contents для выполнения POST-запросов
- Использование fread для выполнения POST-запросов
- Как выполнить в PHP GET-запрос
- Использование fread для загрузки или получения файлов через интернет
- Использование file_get_contents для получения URL-адреса сайта
- PHP — знак плюса с запросом GET
- Можно ли сохранить знаки плюса в PHP $ _GET без кодирования?
- HTTP-запрос методом GET.
- Передача знака & через гет-запрос
Как создать GET POST запросы с помощью PHP
Первый метод, позволяющий выполнить PHP POST запрос, заключается в использовании file_get_contents . Второй метод будет использовать fread в сочетании с парой других функций. Оба варианта применяют функцию stream context create , чтобы заполнить необходимые поля заголовка запроса.
Пояснение кода
Переменная $sPD содержит данные, которые нужно передать. Она должна иметь формат строки HTTP-запроса , поэтому некоторые специальные символы должны быть закодированы.
И в функции file_get_contents , и в функции fread у нас есть два новых параметра. Первый из них — use_include_path . Так как мы выполняем HTTP- запрос , в обоих примерах он будет иметь значение false . При использовании значения true для считывания локального ресурса функция будет искать файл по адресу include_path .
Второй параметр — context , он заполняется возвращаемым значением stream context create , который принимает значение массива $aHTTP .
Использование file_get_contents для выполнения POST-запросов
Чтобы в PHP отправить POST запрос с помощью file_get_contents , нужно применить stream context create , чтобы вручную заполнить поля заголовка и указать, какая « обертка » будет использоваться — в данном случае HTTP :
$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array( 'http' => // Обертка, которая будет использоваться array( 'method' => 'POST', // Метод запроса // Ниже задаются заголовки запроса 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $sPD ) ); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;
Использование fread для выполнения POST-запросов
Для выполнения POST-запросов можно использовать функцию fread . В следующем примере stream context create используется для составления необходимых заголовков HTTP-запроса :
$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array( 'http' => // Обертка, которая будет использоваться array( 'method' => 'POST', // Request Method // Ниже задаются заголовки запроса 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $sPD ) ); $context = stream_context_create($aHTTP); $handle = fopen($sURL, 'r', false, $context); $contents = ''; while (!feof($handle)) < $contents .= fread($handle, 8192); >fclose($handle); echo $contents;
Как выполнить в PHP GET-запрос
Теперь мы уделим внимание использованию fread и file_get_contents для загрузки контента из интернета через HTTP и HTTPS . Чтобы использовать методы, описанные в этой статье, необходимо активировать опцию fopen wrappers . Для этого в файле php.ini нужно установить для параметра allow_url_fopen значение On .
Выполнение POST и GET запросов PHP применяется для входа в систему на сайтах, получения содержимого веб-страницы или проверки новых версий приложений. Мы расскажем, как выполнять простые HTTP-запросы .
Использование fread для загрузки или получения файлов через интернет
Помните, что считывание веб-страницы ограничивается доступной частью пакета. Так что нужно использовать функцию stream_get_contents ( аналогичную file_get_contents ) или цикл while , чтобы считывать содержимое меньшими фрагментами до тех пор, пока не будет достигнут конец файла:
fclose($handle); echo $contents; ?>
В данном случае обработки POST запроса PHP последний аргумент функции fread равен размеру фрагмента. Он, как правило, не должен быть больше, чем 8192 ( 8*1024 ).
Имейте в виду, что он может быть больше или меньше, а также может быть ограничен настройками системы, на которой запускается PHP .
Использование file_get_contents для получения URL-адреса сайта
Еще проще использовать этот метод при считывании файла по HTTP , так как вам не придется заботиться о считывании по фрагментам — все обрабатывается в PHP .
PHP — знак плюса с запросом GET
У меня есть PHP-скрипт, который выполняет базовое шифрование строки с помощью следующего метода:
if ($_GET['method'] == "encrypt") < $output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); >echo $output; ?>
Пример URL-адреса для шифрования строки будет выглядеть так:
Encrypt.php? Method = encrypt & str = быстрая лиса
Что вернет это как зашифрованную строку:
LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Теперь, чтобы расшифровать строку, все, что вам нужно сделать, это изменить запрос «метод» на «расшифровать», например:
Encrypt.php? Method = decrypt & str = LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Единственная проблема в том, что когда эта зашифрованная строка расшифровывается, она возвращает следующее:
Я сузил проблему до знака плюс в зашифрованной строке. Кажется, что метод PHP GET переводит знак плюса в пробел. Я искал эту ошибку и обнаружил, что она уже зарегистрирована здесь. Я пробовал разные методы, перечисленные на этой странице, и другие, но безуспешно. Самое близкое, что я получил, — это использовать это:
$fixedstring = str_replace(" ", "+", $string);
А затем используя $ fixedstring в методах шифрования, проблема в том, что при расшифровке все пробелы преобразуются в знаки плюса. Любые идеи?
Я знаю, что использование POST имеет больше смысла, но я использую GET по определенным причинам. Я не буду вдаваться в подробности.
Можно ли сохранить знаки плюса в PHP $ _GET без кодирования?
Очевидно, я мог кодировать данные перед отправкой, а затем декодировать их, но мне интересно, является ли это единственным решением. Я мог бы также заменить пробелы символами плюс, но я хочу также разрешить пробелы. Я просто хочу, чтобы любые символы были переданы без каких-либо расшифровки или кодировки url. Спасибо!
Конечно. Вы можете прочитать $_SERVER[«QUERY_STRING»] , разбить его самостоятельно, а затем отказаться от обычного декодирования URL-адресов или только конвертировать %xx обратно.
preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs); $_GET = array_combine($pairs[1], $pairs[2]);
(Пример работает только для буквенно-цифровых параметров и не выполняет упомянутое декодирование% xx. Просто разрывает исходный вход.)
if(strpos($_SERVER["QUERY_STRING"], "+") !== false)
Вы можете использовать urlencode , хотя это также переводит любые пробелы в плюс. Это имеет смысл, потому что + в URL обычно представляет собой пробел. Если вам действительно нужен знак «плюс», означающий знак «плюс», вы, вероятно, должны избегать ввода. Это означает, что + станет %2B а ваш URL будет http://mydomain.com/script.php?var=2%2B2 .
Кто-то генерирует URL-адрес, содержащий + в сегменте запроса, является неправильным, если только они не намерены представлять символ пробела. A + в запросе является зарезервированным символом (re: RFC2396 §3.4 ). Если вам нужно вставить литерал + в строку запроса, он должен быть закодирован как %2B (re: RFC2396 §2.2 ).
Для справок в будущем вы можете сделать символ «+» отображаться в запросе на получение без необходимости отправки url с закодированными символами.
Для этого требуется несколько шагов.
- Просто замените свой параметр запроса плюс (+) знаком «% 2B» в URL-адресе перед запросом URL-адреса.
- Теперь вы просто получите параметр запроса. Он автоматически заменит «% 2B» знаком «плюс».
Я просто использовал urlencode() для корректного кодирования URL и urldecode($_Get()) чтобы снова использовать строку.
HTTP-запрос методом GET.
Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.
Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.
Если у вас есть желание погрузиться в тему серверного программирования глубже, все мои уроки здесь.
Браузер передаст серверу примерно следующую информацию:
GET / HTTP/1.1 Host: site.ru User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: wp-settings Connection: keep-alive
Запрос состоит из двух частей:
1. строка запроса (Request Line)
2. заголовки (Message Headers)
Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию. Это можно делать с помощью специальных GET параметров.
Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:
имя_параметра1=значение_параметра1& имя_параметра2=значение_параметра2&…Разделителем между параметрами служит знак «&».
К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:
http://site.ru/page.php?name=dima&age=27
Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.
Вот пример, как это можно сделать на языке PHP.
"; echo "Ваш возраст: " . $_GET["age"] . "
"; ?>
Конструкция $_GET[«имя_параметра»] позволяет выводить значение переданного параметра.
В результате выполнения этого кода в браузере выведется:
Ваше имя: dima Ваш возраст: 27
Кстати, переходя по какой-либо ссылке, которая оформлена в HTML вот так:
мы тоже выполняем запрос к серверу методом GET.
Все мои уроки по серверному программированию здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Передача знака & через гет-запрос
Передача файлов через IdTCPClient & IdTCPServer
Всем доброго времени суток! Уже который день пытаюсь реализовать передачу файлов по локальной.
Запрос БД через PHP и передача содержимого через json_encode
Всем здравствуйте, нужно вывести из БД данные, которые захочет увидеть сам пользователь, через.
Передача изображения по гет-запросу
Привет, подскажите, как организовать следующую вещь. На сайте есть папка с кучей изображений и.
Передача гет запроса в функцию класса
<?php require_once(‘lib/view.php’); $tab = $_GET; $site = new Section(); ?> <!DOCTYPE.
Сообщение от hardwaremaster
С помощью urlencode() пробовал передать (он перегоняет в этот код), но реально он не передает, а расценивает как отдельный гет-запрос.
Сообщение от KingDoc
Сообщение от pav1uxa
Сообщение от pav1uxa
Сообщение от KingDoc
$s = "Hello & world"; echo urlencode($s);
Сообщение от pav1uxa
$s = "Hello & world"; echo urlencode($s);
Выводит урлу в коде в таком виде:
Сообщение от KingDoc
Этот «скрипт» выведет ошибку неизвестная переменная $world. Дважды.
$world="Hello & world"; ?> a href="/&world=$world); ?>"> echo $world; ?>a>
Сообщение от pav1uxa
Этот «скрипт» выведет ошибку неизвестная переменная $world. Дважды.
$world="Hello & world"; ?> a href="/&world=$world); ?>"> echo $world; ?>a>
Издеваетесь? — это понятно, что у меня есть задание переменной (это вообще внутри массива идет — в цикле форич, который лежит во вьюхе, к которой еще контроллер и моделька, если уже так копать мой весь скрипт) и весь скрипт смысла копировать нет. Выводимую суть я указываю (копирую результат вывода).
Результат такой, как я пишу, получаю.
Добавлено через 7 минут
И еще, я попробовал добавить ссылку в таком виде и перейти по ней:
Сообщение от KingDoc
Издеваетесь это Вы похоже. Я Вам показываю конкретные скрипты, которые Вы можете скопировать себе и удостовериться в их работе, раз уж не верите моим словам. Однако Вы мне выплевываете какие-то огрызки и пишете какую то ахинею.
Сообщение от KingDoc
то тут можно только пособолезновать.
Вы хотите сказать что Ваш браузер автоматически переводит текст в верхний регистр, потом первый знак «+» заменяет на «%20«, «%26» заменяет на «&» и второй знак «+» заменяет на «_«. А потом еще и знак «=» в конце дописывает. Хорошая сказка.
Сообщение от pav1uxa
Издеваетесь это Вы похоже. Я Вам показываю конкретные скрипты, которые Вы можете скопировать себе и удостовериться в их работе, раз уж не верите моим словам. Однако Вы мне выплевываете какие-то огрызки и пишете какую то ахинею.
то тут можно только пособолезновать.
Вы хотите сказать что Ваш браузер автоматически переводит текст в верхний регистр, потом первый знак «+» заменяет на «%20«, «%26» заменяет на «&» и второй знак «+» заменяет на «_«. А потом еще и знак «=» в конце дописывает. Хорошая сказка.
спасибо. задачу решил, но другим образом.
urlencode работает, но не в моем случае.
проблема не в браузере — проблема с модулем для чпу в движке, который «по-своему» урлу рубит и перенаправляет (в остальном у него нет проблем, только вот такая обнаружилась с гет-запросами и только при этом «&»). в него лезть и искать проблему не стал.
решил с помощью функции: