Базовая работа с php curl: get, post, json, headers

Получение информации о запросе cUrl

Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.

curl_exec($ch);
$info = curl_getinfo($ch);
echo 'Запрос для url ' . $info . ' занял ' . $info . ' секунд ';

Функция возвращает данные в виде массива со следующими ключами:

  • url
  • content_type
  • http_code
  • header_size
  • request_size
  • filetime
  • ssl_verify_result
  • redirect_count
  • total_time
  • namelookup_time
  • connect_time
  • pretransfer_time
  • size_upload
  • size_download
  • speed_download
  • speed_upload
  • download_content_length
  • upload_content_length
  • starttransfer_time
  • redirect_time

Postman

Основное предназначение приложения — создание коллекций с запросами к вашему API. Любой разработчик или тестировщик, открыв коллекцию, сможет с лёгкостью разобраться в работе вашего сервиса. Ко всему прочему, Postman позволяет проектировать дизайн API и создавать на его основе Mock-сервер. Вашим разработчикам больше нет необходимости тратить время на создание «заглушек». Реализацию сервера и клиента можно запустить одновременно. Тестировщики могут писать тесты и производить автоматизированное тестирование прямо из Postman. А инструменты для автоматического документирования по описаниям из ваших коллекций сэкономят время на ещё одну «полезную фичу». Есть кое-что и для администраторов — авторы предусмотрели возможность создания коллекций для мониторинга сервисов.

Скачивание больших файлов с помощью cURL

Для того, чтобы скачать большой файл пригодится этот способ:

$url = 'https://example.com/big_file.zip'; // откуда скачиваем файл
$path = __DIR__ . '/big_file.zip';  // куда сохраняем файл

$fp = fopen($path, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);

Обратите внимание, если вы будете использовать file_get_contents для скачивания файлов, то файл сначала загружается в оперативную память, а потом сохраняется на диск. Поэтому если файл действительно большой, то скорее всего вашему серверу не хватит памяти

Также к памяти будет требователен следующий код:

$ch = curl_init('https://example.ru/big_file.zip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
curl_close($ch);

file_put_contents(__DIR__ . '/big_file.zip', $data);

Здесь мы скачиваем файл при помощи cURL в оперативную память, а затем сохраняем его на диск. Не смотря на то, что этот способ не годится для скачивания больших файлов, с помощью него можно вполне сохранить простую веб страницу.

Метод POST

Когда вы заходите на любой сайт, вы делаете это методом GET. Вернее, ваш браузер сообщает серверу, что заход осуществляется методом GET. Когда вы переходите по страницам сайта — каждая страница запрашивается методом GET.

Однако у этого метода есть недостаток — GET-параметры видны в адресной строке. Это значит, что введённые в форму логин и пароль будут передаваться в URL-адресе, а значит видны в истории браузера, что очень нехорошо.

По этой причине для отправки форм, которые могут содержать конфиденциальную информацию, нужно всегда использовать метод POST. При использовании метода POST данные передаются в теле http-запроса, а не в URL.

Метод GET в формах чаще всего используется для поиска чего-либо (товаров, статей и т.д.).

Некоторые разработчики считают, что данные, передаваемые методом POST, имеют какую-то особую защиту, которая не позволяет злоумышленнику украсть или подменить их.

Это не так. Никакой дополнительной защиты у метода POST нет. Для защиты http-запросов нужно использовать https.

Данные, передаваемые методом POST, лежат в суперглобальном массиве $_POST. Теперь можно переписать нашу форму, чтобы она передавала данные методом POST:

Передача переменных между страницами post

Для того, чтобы передать переменную с одной страницы на другую с помощью post, нужно:

в в атрибуте =»адрес страницы», указываем example.php, если «форма» и «» лежат в разных папках, то нужно указывать абсолютный путь

Открываем страницу «example.php», и создаем те условия, которые мы уже неоднократно показывали!:

if($_POST){$var = strip_tags($_POST);}

У вас должно получиться, что-то в виде этого:

example.php

Если нужно вывести переменную «$var» на экран, то воспользуйтесь функцией echo

<?

if($_POST){$var = strip_tags($_POST);}

echo $var;

?>

Html :
<form method=»post» =»example.php»>

<input type=»text» name=»login»><br>

<input type=»password» name=»psw» ><br>

<input type=»submit» name=»send» value=»ОТПРАВИТЬ» /><br>

</form>

Пользуйтесь на здоровье! Не забудьте сказать

Теги :php post
php отправить post
php отправить post запрос
php отправить файл post
отправить файл post запросом php
метод post php
обработка метода post php
передача методом post php
php передать массив методом post
методы передачи данных post php
php отправка данных методом post
php post форма
запрос post php
элемент post php
method post php
post php пример
post php форма
пример формы post
послать post запрос
передача переменных между страницами post
post метод пример
$_post php что это
как увидеть post запрос
php post запрос
как запустить post запрос php
как вывести массив post php
array post php это что
php post параметры
как узнать что в массиве post

POST запрос при помощи cURL

Теперь давайте отправим post запрос на адрес https://httpbin.org/anything

$url = 'https://httpbin.org/anything'; // url, на который отправляется запрос
$post_data = [ // поля нашего запроса
    'field1' => 'val_1',
    'field2' => 'val_2',
];

$headers = []; // заголовки запроса

$post_data = http_build_query($post_data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true); // true - означает, что отправляется POST запрос

$result = curl_exec($curl);

Отлично, с GET и POST запросами в cURL мы немного освоились.
Теперь разберемся с заголовками, которые мы можем отсылать в запросе.

Заголовки устанавливаются при помощи опции CURLOPT_HTTPHEADER
Чтобы получше узнать, для чего нужна эта опция давайте попробуем отправить POST запрос в формате JSON

POST запросы cUrl в PHP

$array = array(
'login' => 'user',
'password' => '123'
);

$ch = curl_init('https://asgeto.ru');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);

// Или предать массив строкой:
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array, '', '&'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:

$headers = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL,
'content' => 'login=user&password=123',
),
));

echo file_get_contents('https://asgeto.ru', false, $headers);

Форма с методом POST

Разберем подробно из чего должна состоять форма для отправки «запроса POST».

Форма состоит из:

Двойной тег form

<form> </form>

Необходимый атрибут method, который будет указывать тип метода, в нашем случае это «POST».

<form method=»post»> </form>

Атрибут action можем ставить, можем оставить просто пустым — будем обрабатывать запрос post на этой странице!

<form method=»post» =»»>

Поля ввода данных

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

<input>

У тега input должен быть атрибут «type», пусть это будет текстовое поле, поэтому тип будет «https://dwweb.ru/page/html/tags/015_type_text_html.htmtext»:

<input type=»text»>

Далее, чтобы получать из него данные с помощью php нам потребуется атрибут name. Не путать с

<input type=»text» name=»login»>

Кнопка отправки запроса POST

Для отправки данных можно также использовать input, но и также можно использовать тег button, мы будем использовать

<input>

У кнопки отправки есть отдельный тип, который называется submit

<input type=»submit»<

Также как и в других input, добавляем сюда type,name,value

<input type=»submit» name=»send» value=»ОТПРАВИТЬ»>

Соберем весь код формы для отправки запроса post.

password
<form method=»post» =»»>

  <input type=»text» name=»login»><br>

  <input type=»password» name=»psw» ><br>

  <input type=»submit» name=»send» value=»ОТПРАВИТЬ» /><br>

</form>

Форму выведем ниже!

Далее нам нужно переданные данные из этой формы обработать!

Track and trace your international shipping

Online buyers check delivery status not out of curiosity — in fact, they try to make sure that their packages arrive within buyer protection period. If customers do not receive a package on time, they may ask the seller to extend the period or open a dispute and ask for a refund.

eBay has created a convenient service for sellers, eBay Global Shipping Program, so that any seller may expand the geography of sales without undue problems. Under this program, the sellers first deliver their items to a centralized hub, and they get delivered to the buyers by various international and local courier services. Read more.

Even cheap AliExpress products get assigned with tracking codes. An item should be more than $2 in price and meet the requirements of most Chinese carriers in size. Over 50 postal services deliver AliExpress orders from China to other countries worldwide, and Postal Ninja supports tracking number formats of all of them. Learn more.

High-quality Chinese products are also available on WISH. Although they are a bit more expensive than on AliExpress, even including the delivery price, it is significantly more profitable than in the domestic outlets. And their own delivery service WishPost, as well as other Chinese carriers, including ePacket, are more convenient to get tracked on Postal Ninja. Read more.

ASOS («As Seen On Screen») is a British online fashion and cosmetics retailer that cooperates with courier services such as wnDirect, TrakPak, and DPD. In terms of tracking, its packages have a particular feature — they can be traced by shipping id as well as by order number. More info.

Сравнить GET vs. POST

В следующей таблице сравниваются два метода HTTP: Get и POST.

  GET POST
Кнопка возврата/перезагрузка Безвредны Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка Можно закладка Не может быть Закладка
Кэшированные Может кэшироваться Не кэшируется
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data. Использование многокомпонентной кодировки для двоичных данных
Истории Параметры остаются в журнале обозревателя Параметры не сохраняются в журнале обозревателя
Ограничения по длине данных Да, при отправке данных метод Get добавляет данные в URL-адрес; и длина URL ограничена (максимальная длина URL составляет 2048 символов) Без ограничений
Ограничения типа данных Разрешены только символы ASCII Никаких ограничений. Двоичные данные также разрешены
Безопасности Get менее безопасен по сравнению с POST, поскольку отправляемые данные являются частью URL-адреса POST немного безопаснее, чем Get, поскольку параметры не сохраняются в журнале обозревателя или в журналах веб-сервера
Видимость Данные видны всем в URL Данные не отображаются в URL-адресе

Метод POST

Метод POST передает информацию через HTTP-заголовки. Информация кодируется, как описано в случае метода GET, и помещается в заголовок QUERY_STRING.

  • Метод POST не имеет ограничений на размер данных, которые необходимо отправить.
  • Метод POST может использоваться для отправки ASCII, а также двоичных данных.
  • Данные, отправленные методом POST, проходят через HTTP-заголовок, поэтому безопасность зависит от протокола HTTP. Используя Secure HTTP, вы можете убедиться, что ваша информация защищена.
  • PHP предоставляет ассоциативный массив $_POST для доступа ко всей отправляемой информации с использованием метода POST.

Попробуйте следующий пример, поместив исходный код в скрипт test.php .


   if( $_POST || $_POST ) {
      if (preg_match("",$_POST )) {
         die ("invalid name and name should be alpha");
      }
      echo "Welcome ". $_POST;
      echo "You are ". $_POST. " years old.";
      exit();
   }



      <form action = "?php $_PHP_SELF ?" method = "POST">
         Name: <input type = "text" name = "name" />
         Age: <input type = "text" name = "age" />
         <input type = "submit" />
      </form>

Отправить GET-запрос из формы

Форма запроса может использовать метод GET. Например, так:

 <form method="GET" action="foo.cgi">
 <input type=text name="year">
 <input type=submit name=press value="OK">
 </form>

Если вы откроете этот код в браузере, то увидите форму с текстовым полем и кнопкой с надписью «OK». Если вы, например, введете в форму ‘1990’ и нажмете «OK», то браузер создаст новый URL, по которому и проследует. Этот URL будет являться строкой, состоящей из предыдущего URL и строки запроса, вроде следующей: . Так, если форма располагалась по адресу (адрес взят «с потолка»!), то при нажатии на кнопку «OK» вы попадете на URL .

Для формирования GET-запроса, введите то, что ожидалось от формы:

$ curl "www.foo.com/foo.cgi?year=1990&press=OK"

Отправка cURL запроса PHP

Формирование cURL запроса состоит из четырех этапов:

  1. Инициализация
  2. Указание параметров
  3. Выполнение команды и получение результата
  4. Освобождение памяти

Итак, как это должно выглядеть в коде:

// 1. Инициализация
$ch = curl_init();

// 2. Указание параметров
curl_setopt($ch, CURLOPT_URL, "https://asgeto.ru");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);

// 3. Выполнение команды и получение результата
$output = curl_exec($ch);
// В случае возникновения ошибки выводит её в документ
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch); // можно заменить на логирование в файл при желании
}

// 4. Освобождение памяти
curl_close($ch);

Отправка форм

Последнее обновление: 15.03.2021

Одним из основных способов передачи данных веб-сайту является обработка форм. Формы представляют специальные элементы разметки HTML, которые содержат
в себе различные элементы ввода — текстовые поля, кнопки и т.д. И с помощью данных форм мы можем ввести некоторые данные и отправить их на сервер. А сервер уже обрабатывает эти данные.

Создание форм состоит из следующих аспектов:

  • Создание элемента в разметке HTML

  • Добавление в этот элемент одно или несколько поле ввода

  • Установка метода передачи данных. Чаще всего используются методы или

  • Установка адреса, на который будут отправляться введенные данные

POST-запросы

Итак, создадим новую форму. Для этого определим новый файл form.php, в которое поместим следующее содержимое:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<h3>Форма ввода данных</h3>
<form action="user.php" method="POST">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

Атрибут элемента указывает, что данные формы будет обрабатывать скрипт user.php,
который будет находиться с файлом в одной папке. А атрибут указывает, что в качестве метода передачи данных будет применяться метод POST.

<?php
$name = "не определено";
$age = "не определен";
if(isset($_POST)){
 
    $name = $_POST;
}
if(isset($_POST)){
 
    $age = $_POST;
}
echo "Имя: $name <br> Возраст: $age";
?>

Для обработки запросов типа POST в PHP используется встроенная глобальная переменная $_POST.
Она представляет ассоциативный массив данных, переданных с помощью метода POST. Используя ключи, мы можем получить отправленные
значения. Ключами в этом массиве являются значения атрибутов у полей ввода формы.

Например, так как атрибут поля ввода возраста имеет значение (),
то в массиве значение этого поля будет представлять ключ «age»:

И поскольку возможны ситуации, когда поле ввода будет не установлено, то в этом случае желательно перед обработкой данных проверять
их наличие с помощью функции isset(). И если переменная установлена, то функция isset() возвратит значение .

Теперь мы можем обратиться к скрипту form.php и ввести в форму какие-нибудь данные:

И по нажатию кнопки введенные данные методом POST будут отправлены скрипту user.php:

Необязательно отправлять данные формы другому скрипту, можно данные формы обработать в том же файле формы. Для этого изменим файл form.php
следующим образом:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
$name = "не определено";
$age = "не определен";
if(isset($_POST)){
 
    $name = $_POST;
}
if(isset($_POST)){
 
    $age = $_POST;
}
echo "Имя: $name <br> Возраст: $age";
?>
<h3>Форма ввода данных</h3>
<form method="POST">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

Поскольку в данном случае мы отправляем данные этому же скрипту — то есть по тому же адресу, то у элемента форма можно не устанавливать
атрибут .

Стоит отметить, что в принципе мы можем отправлять формы и запросом GET, в этом случае для получения тех же значений формы
применяется массив $_GET, который был рассмотрен в прошлой теме:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
$name = "не определено";
$age = "не определен";
if(isset($_GET)){
 
    $name = $_GET;
}
if(isset($_GET)){
 
    $age = $_GET;
}
echo "Имя: $name <br> Возраст: $age";
?>
<h3>Форма ввода данных</h3>
<form method="GET">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

НазадВперед

Вводим несколько запросов для Aeris API в Postman

Теперь давайте посмотрим информацию о погоде из Aeris Weather API, которую изучили . Сконструировать конечную точки для Aeris Weather API немного сложнее, поскольку для конфигурации конечной точки можно использовать много разных запросов, фильтров и других параметров.

Вот несколько предварительно настроенных запросов для настройки для Aeris.

Можно вставить запросы непосредственно в поле запроса URL-адреса в Postman (после настройки значений и ), и параметры будут автоматически заполнены в нужных полях.

Как и в случае OpenWeatherMap API, Aeris API не использует поле заголовка для передачи ключей API — ключ и секрет передаются непосредственно в URL-адресе запроса, как часть строки запроса.

Note: При создании следующих запросов, вставьте свои собственные значения для и (при условии, что вы получили их, выполняя практическое занятие ). При отсутствии и , можно использовать ключи автора.

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

Получаем погоду для города на экваторе — Чимборасо, Эквадор, используя ту же точку Observations:

Посмотрим, вся ли музыка кантри в Ноксвилле, штат Теннесси, провоцирует мигрень у жителей, используя конечную точку Indices:

Подумываете о переезде в Аризону и подыскиваете местечко получше? Используем конечную точку normals

Tip: И с OpenWeatherMap, и с Aeris Weather API можно сделать эти запросы, просто перейдя по URL-адресу в адресной строке (поскольку API передаются в строке запроса, а не в заголовке). Используйте расширение JSON Formatter для Chrome, чтобы автоматически форматировать ответ JSON в представлении браузера.

Изучив эти два разных API сервисов прогноза погоды, можно увидеть различия в способе вызова и возврата информации. Однако, по сути, оба API имеют конечные точки, которые можно настраивать с помощью параметров. При создании запроса с конечными точками, получаем ответы, которые содержат информацию, часто в формате JSON. Это основа работы REST API: отправляем запрос — получаем ответ.

Функция «post в JavaScript»

Создадим функцию post :

function post() {}

Получаем данные из полей ввода :

var a = ida .value; // Считываем значение a

var b = idb .value; // Считываем значение b

В переменную «data» помещаем, конструкцию похожую на массив(но не массив) ключ = значение.

var data = «a=» + encodeURIComponent(a) + «&b=» + encodeURIComponent(b);

Создаём объект xhr:

var xhr = new XMLHttpRequest();

Открываем асинхронное соединение :

xhr.open(«POST», «https://dwweb.ru/путь до файла/examople_post_js.php» , true);

Отправляем кодировку :

xhr.setRequestHeader(«Content-Type», «application/x-www-form-urlencoded»);

Отправляем POST-запрос :

xhr.send(data);

Далее, не буду каждую строчку расписывать смотрим комментарии:

xhr.onreadystatechange = function() // Ждём ответа от сервера
{
  if (xhr.readyState == 4) // возвращает текущее состояние объекта(0-4)
  {
    if(xhr.status == 200) // код 200 (если страница не найдена вернет 404)
    {
      summa.innerHTML = xhr.responseText; // Выводим ответ сервера
    }
  }
}

Post и Get запросы, какая между ними разница и что лучше и для каких целей?

тело сообщения (Entity Body) – необязательный параметр

Строка запроса – указывает метод передачи, URL-адрес, к которому нужно обратиться и версию протокола HTTP.

Заголовки – описывают тело сообщений, передают различные параметры и др. сведения и информацию.

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

Когда мы получаем ответный запрос от сервера, тело сообщения, чаще всего представляет собой содержимое веб-страницы. Но, при запросах к серверу, оно тоже может иногда присутствовать, например, когда мы передаем данные, которые заполнили в форме обратной связи на сервер.

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

Давайте, для примера, рассмотрим один реальный запрос к серверу. Я выделил каждую часть запроса своим цветом: строка запроса — зеленый, заголовки — оранжевый, тело сообщения- голубой.

Запрос от браузера:

GET / HTTP/1.1

Host: webgyry.info

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

В следующем примере уже присутствует тело сообщения.

Ответ сервера:

HTTP/1.1 200 OK

Date: Sun, 10 Feb 2013 03:51:41 GMT

Content-Type: text/html; charset=utf-8

Transfer-Encoding: chunked

Connection: keep-alive

Keep-Alive: timeout=5

Server: Apache

X-Pingback: //webgyry.info/xmlrpc.php

<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>

<html xmlns=»http://www.w3.org/1999/xhtml»>

<head>

<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />

<title>Документ без названия</title>

</head>

<body>

</body>

</html>

Вот такими сообщениями обмениваются клиент и сервер по протоколу HTTP.

Кстати, хотите узнать есть ли смысл в каком-то элементе на вашем сайте с помощью «целей» Яндекс Метрики и Google Analytics?

Уберите то, что НЕ работает, добавьте то, что работает и удвойте вашу выручку.

Курс по настройке целей Яндекс Метрики..

Полезно знать

В завершении приведем основные команды, которые вам могут понадобиться во время написания скриптов. Для лучшего усвоения, попробуйте поиграться с ними самостоятельно.

Работа со встроенными библиотеками

Документация регламентирует наличие некоторого количества встроенных библиотек, среди которых — tv4 для валидации json, xml2js конвертер xml в json, crypto-js для работы с шифрованием, atob, btoa и др.

Некоторые из библиотек, например, как tv4 не требуют прямого подключения через require и доступны по имени сразу.

Управление последовательностью запросов из скрипта

Стоит отметить, что данный метод работает только в режиме запуска всех скриптов.

После перехода на следующий запрос Postman возвращается к линейному последовательному выполнению запросов.

Создание глобального хелпера

В некоторых случаях вам захочется создать функции, которые должны быть доступны во всех запросах. Для этого в первом запросе в секции “Pre-request Script” напишите следующий код:

А в последующих скриптах пользуемся им так:

Это лишь небольшой список полезных команд. Возможности скриптов гораздо шире, чем можно осветить в одной статье. В Postman есть хорошие «Templates», которые можно найти при создании новой коллекции. Не стесняйтесь подглядывать и изучать их реализацию. А официальная документация содержит ответы на большинство вопросов.

Учимся работать с формами

Давайте теперь вспомним уроки про формы из курса по HTML и сделаем простейшую форму для отправки GET-запроса на страничку.

Давайте запишем в наш index.php следующий код:

И давайте теперь откроем его в браузере: http://myproject.loc/index.php

Как мы видим по исходному коду, форма отправит аргументы login и password с введенными значениями на адрес /login.php.

Давайте введем в поля значения admin и Pa$$w0rd соответственно и нажмем на кнопку «Войти».

Нас отправит на страничку http://myproject.loc/login.php?login=admin&password=Pa%24%24w0rd

Где сервер нам скажет о том, что такой странички не найдено.

Отлично! Так давайте же её создадим! Создаём рядом с нашим index.php файл с именем login.php. И пишем в него следующий код:

Вернёмся на нашу форму и повторно отправим пароль. Теперь мы увидим информацию о том, что мы успешно авторизовались. Это простейший прототип формы авторизации. Разумеется, он сильно упрощён, не всё сразу. А пока – делаем домашнее задание.

#php
#get
#request
#http

@ivashkevich

16.01.2018 в 20:02

36008

+4411

PHP для начинающих

67%

Назад

Следующий урок

GET и POST-запросы. Кодировка.

Во время обычного submit’а формы браузер сам кодирует значения полей и составляет тело GET/POST-запроса для посылки на сервер. При работе через XmlHttpRequest, это нужно делать самим, в javascript-коде. Большинство проблем и вопросов здесь связано с непониманием, где и какое кодирование нужно осуществлять.

Вначале рассмотрим общее кодирование запросов, ниже — правильную работу с русским языком для windows-1251.

Существуют два вида кодирования HTTP-запроса. Основной — urlencoded, он же — стандартное кодирование URL. Пробел представляется как %20, русские буквы и большинство спецсимволов кодируются, английские буквы и дефис оставляются как есть.

Способ, которым следует кодировать данные формы при submit’е, задается в ее HTML-таге:

<form method="get"> // метод GET с кодировкой по умолчанию
<form method="post" enctype="application/x-www-form-urlencoded"> // enctype явно задает кодировку
<form method="post"> // метод POST с кодировкой по умолчанию (urlencoded, как и предыдущая форма)

Если форма submit’ится обычным образом, то браузер сам кодирует (urlencode) название и значение каждого поля данных ( и т.п.) и отсылает форму на сервер в закодированном виде.

Формируя XmlHttpRequest, мы должны формировать запрос «руками», кодируя поля функцией .

Конечно, пропускать через encodeURIComponent стоит только те переменные, в которых могут быть спецсимволы или не английские буквы, т.е которые и будут как раз закодированы.

Например, для посылки GET-запроса с произвольными параметрами name и surname, их необходимо закодировать вот так:

// Пример с GET
...
var params = 'name=' + encodeURIComponent(name) + '&surname=' + encodeURIComponent(surname)
xmlhttp.open("GET", '/script.html?'+params, true)
...
xmlhttp.send(null)

В методе POST параметры передаются не в URL, а в теле, посылаемом через . Поэтому нужно указывать не в адресе, а при вызове

Кроме того, при POST обязателен заголовок Content-Type, содержащий кодировку. Это указание для сервера — как обрабатывать (раскодировать) пришедший запрос.

// Пример с POST
...
var params = 'name=' + encodeURIComponent(name) + '&surname=' + encodeURIComponent(surname)
xmlhttp.open("POST", '/script.html', true)
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
...
xmlhttp.send(params)

Заголовки Content-Length, Connection в POST-запросах, хотя их и содержат некоторые «руководства», обычно не нужны. Используйте их, только если Вы действительно знаете, что делаете.

Запросы multipart/form-data

Второй способ кодирования — это отсутствие кодирования. Например, кодировать не нужно для пересылки файлов. Он указывается в форме (только для POST) так:

<form method="post" enctype="multipart/form-data">

В этом случае при отправке данных на сервер ничего не кодируется. А сервер, со своей стороны, посмотрев на Content-Type(=multipart/form-data), поймет, что пришло.

Возможности XmlHttpRequest позволяют создать запрос с любым телом. Например, можно вручную сделать POST-запрос, загружающий на сервер файл. Функционал создания
таких запросов есть, в частности, во фреймворке . Но можно реализовать его и самому, прочитав о нужном формате тела POST и заголовках.

Кодировка (языковая)

Если Вы используете только UTF-8 — пропустите эту секцию.

Все идущие на сервер параметры GET/POST, кроме случая multipart/form-data, кодируются в UTF-8. Не в кодировке страницы, а именно в UTF-8. Поэтому, например, в PHP их нужно при необходимости перекодировать функцией iconv.

<?php
// ajax.php
$name = iconv('UTF8','CP1251',$_GET);
?>

С другой стороны, ответ с сервера браузер воспринимает именно в той кодировке, которая указана в заголовке ответа Content-Type. Т.е, опять же, в PHP, чтобы браузер воспринял ответ в windows-1251 и нормально отобразил данные на странице в windows-1251,
нужно послать заголовок с кодировкой в php-коде, например так:

<?php
// ajax.php
header('Content-Type: text/plain; charset=utf-8');
?>

Или же, такой заголовок должен добавить сервер. Например, в apache автоматически добавляется кодировка опцией:

# в конфиге апача
AddDefaultCharset windows-1251

Postal Ninja — track your package in a trice

Postal Ninja saves you the trouble of tracking your mail. Our website combines tracking systems of more than 540 postal and courier services, which means you can monitor the location of any package sent with major postal operators. What’s more, all tracking information is in English, which is a real plus.

You can browse our site either as a guest or a registered user. Track your packet by shipping id as a guest and register to get access to «My packages» feature. The latter allows you to keep track of all your previous and current shipments on one page.

To enhance your package tracking experience, you can link a product detail page to each item on your list and set 20-/30- or 60-day deadlines. By linking pages, you get visual cues, i.e., pictures of your orders instead of just tracking numbers. As for target dates, they will remind you about the expiration of buyer protection.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector