Get запросы php символы

Как создать 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 .

Читайте также:  Сделать полупрозрачный градиент css

Выполнение 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 работает, но не в моем случае.
проблема не в браузере — проблема с модулем для чпу в движке, который «по-своему» урлу рубит и перенаправляет (в остальном у него нет проблем, только вот такая обнаружилась с гет-запросами и только при этом «&»). в него лезть и искать проблему не стал.
решил с помощью функции:

Источник

Оцените статью