Чем отличается post от get
Содержание:
- Go async requests
- Go HTTP POST request FORM data
- Validators
- Общие принципы
- HTML Tags
- Проверить отправлен ли get запрос!?
- Методы
- Скачивание больших файлов с помощью cURL
- Проверить отправлен ли get запрос!?
- Advantages of POST
- В каких случаях использовать POST и когда нужно использовать GET
- Примеры запросов POST с использованием библиотеки REQUESTS в PYTHON
- cURL и другие виды HTTP запросов: PUT, DELETE, HEAD, PATCH, OPTIONS, CONNECT и т.д.
- Использование fread для выполнения POST-запросов
- HTML Теги
- Переменная $_REQUEST
- Example of AngularJS $http.get() Service
- GET запрос при помощи cURL
- Заголовки запроса
- Difference between a GET and POST
- Пример использования GET метода!
Go async requests
Go has goroutines for making asynchronous requests. A goroutine is a lightweight
thread managed by the Go runtime.
async_req.go
package main import ( "fmt" "io/ioutil" "log" "net/http" "regexp" "sync" ) func main() { urls := []string{ "http://webcode.me", "https://example.com", "http://httpbin.org", "https://www.perl.org", "https://www.php.net", "https://www.python.org", "https://code.visualstudio.com", "https://clojure.org", } var wg sync.WaitGroup for _, u := range urls { wg.Add(1) go func(url string) { defer wg.Done() content := doReq(url) title := getTitle(content) fmt.Println(title) }(u) } wg.Wait() } func doReq(url string) (content string) { resp, err := http.Get(url) defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } return string(body) } func getTitle(content string) (title string) { re := regexp.MustCompile("<title>(.*)</title>") parts := re.FindStringSubmatch(content) if len(parts) > 0 { return parts } else { return "no title" } }
We make multiple asynchronous HTTP requests. We get the contents of the
tag of each of the web pages.
var wg sync.WaitGroup
are used to manage goroutines. It waits for a collection
of goroutines to finish
go func(url string) { defer wg.Done() content := doReq(url) title := getTitle(content) fmt.Println(title) }(u)
A goroutine is created with the keyword.
$ go run async_req.go The Perl Programming Language - www.perl.org Welcome to Python.org Visual Studio Code - Code Editing. Redefined PHP: Hypertext Preprocessor Example Domain httpbin.org Clojure My html page
Go HTTP POST request FORM data
The issues a POST to the specified URL, with data’s keys
and values URL-encoded as the request body. The Content-Type header is set to
application/x-www-form-urlencoded. The data is sent in the body of the request;
the keys and values are encoded in key-value tuples separated by ‘&’, with a
‘=’ between the key and the value.
post_req_form.go
package main import ( "encoding/json" "fmt" "log" "net/http" "net/url" ) func main() { data := url.Values{ "name": {"John Doe"}, "occupation": {"gardener"}, } resp, err := http.PostForm("https://httpbin.org/post", data) if err != nil { log.Fatal(err) } var res mapinterface{} json.NewDecoder(resp.Body).Decode(&res) fmt.Println(res) }
We send a POST request to the page.
resp, err := http.PostForm("https://httpbin.org/post", data)
The data is sent with function.
var res mapinterface{} json.NewDecoder(resp.Body).Decode(&res)
We decode the response body into a map.
fmt.Println(res)
We print the received data.
$ go run post_req_form.go map
Validators
All conditional headers try to check if the resource stored on the server matches a specific version. To achieve this, the conditional requests need to indicate the version of the resource. As comparing the whole resource byte to byte is impracticable, and not always what is wanted, the request transmits a value describing the version. Such values are called validators, and are of two kinds:
- the date of last modification of the document, the last-modified date.
- an opaque string, uniquely identifying each version, called the entity tag, or the etag.
Comparing versions of the same resource is a bit tricky: depending on the context, there are two kinds of equality checks:
- Strong validation is used when byte to byte identity is expected, for example when resuming a download.
- Weak validation is used when the user-agent only needs to determine if the two resources have the same content. This is even if they are minor differences; like different ads, or a footer with a different date.
The kind of validation is independent of the validator used. Both and allow both types of validation, though the complexity to implement it on the server side may vary. HTTP uses strong validation by default, and it specifies when weak validation can be used.
Strong validation consists of guaranteeing that the resource is, byte to byte, identical to the one it is compared too. This is mandatory for some conditional headers, and the default for the others. Strong validation is very strict and may be difficult to guarantee at the server level, but it does guarantee no data loss at any time, sometimes at the expense of performance.
It is quite difficult to have a unique identifier for strong validation with . Often this is done using an with the MD5 hash of the resource (or a derivative).
Weak validation differs from strong validation, as it considers two versions of the document as identical if the content is equivalent. For example, a page that would differ from another only by a different date in its footer, or different advertising, would be considered identical to the other with weak validation. These same two versions are considered different when using strong validation. Building a system of etags that creates weak validation may be complex, as it involves knowing the importance of the different elements of a page, but is very useful towards optimizing cache performance.
Общие принципы
Если вы уже знаете, что такое mod_rewrite, как им пользоваться под apache, то пропускайте эту часть статьи.
Apache управляется конфигурационными файлами с именем .htaccess в директориях сервера и выполняет соответствующие инструкции. Главным из них является файл находящийся в корне сайта. В подкаталогах вашего сайта также могут находится .htaccess файлы, дополняющие/изменяющие директивы заданные в файлах ближе к корню.
Вот пример типичной переадресации в CMS средствами «мод рерайт»:
# Типичное перенаправлние всех запросов на скрипт /index.php
# данные инструкции размещаются в корне сайта в файле .htaccess
<IfModule mod_rewrite.c>
#включаем использование модуля
RewriteEngine On
#устанавливаем базовый путь переадресации
RewriteBase /
#правила пишутся друг за другом и выполняются по порядку
#1. Правило № 1
#если запрашивают файл index.php, то ничего не меняем (прочерк)
#это позволяет избежать зацикливания
RewriteRule ^index\.php$ —
#2. Правило № 2
#Эта переадресация сложнее, она предваряется условиями
#если запрашивают не файл
RewriteCond %{REQUEST_FILENAME} !-f
#если запрашивают не каталог
RewriteCond %{REQUEST_FILENAME} !-d
#тогда выполняется перенаправление на скрипт index.php
RewriteRule . /index.php
</IfModule>
1 |
# Типичное перенаправлние всех запросов на скрипт /index.php <IfModule mod_rewrite.c> #включаем использование модуля RewriteEngine On #устанавливаем базовый путь переадресации RewriteBase/ RewriteRule^index\.php$-L #2. Правило № 2 RewriteCond%{REQUEST_FILENAME}!-f #если запрашивают не каталог RewriteCond%{REQUEST_FILENAME}!-d #тогда выполняется перенаправление на скрипт index.php RewriteRule./index.phpL </IfModule> |
Есть отличие перенаправления от переадресации.
Перенаправление
Отличие заключается в том, что в первом случае происходит обработка запроса, так как будто он был выполнен к указанному в перенаправлении скрипту/файлу/адресу. В нашем случае мы направляем все запросы к index.php
Переадресация
При переадресации, а в этом случае я бы добавил специальный флаг :
RewriteRule . /index.php
1 | RewriteRule./index.phpR=301,L |
Сервер ответит клиенту, что нужно перейти по указанному адресу. Тогда клиент вновь запросит сервер, но уже по новому адресу. В адресной строке браузера, к примеру, отобразится этот новый адрес.
Теперь, когда вы имеете общие представления о работе модуля, то я покажу вам несколько примеров как с его помощью работать с параметрами GET .
HTML Tags
<!—><!DOCTYPE><a><abbr><acronym><address><applet><area><article><aside><audio><b><base><basefont><bdi><bdo><big><blockquote><body><br><button><canvas><caption><center><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><dir><div><dl><dt><em><embed><fieldset><figcaption><figure><font><footer><form><frame><frameset><h1> — <h6><head><header><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><meta><meter><nav><noframes><noscript><object><ol><optgroup><option><output><p><param><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><small><source><span><strike><strong><style><sub><summary><sup><svg><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><tt><u><ul><var><video>
Проверить отправлен ли get запрос!?
if(!$_GET)print_r if(!$_GET){echo ‘get запрос не был отправлен’;} else{ echo’ $_GET запрос отправлен и равен :<br>’; print_r ($_GET) ; }
Ну и естественно, что выведем прямо здесь
Если
Если вы нажали кнопку отправить в верхнем пункте, либо в любом другом пункте на этой страницу, то здесь проверка на гет запрос сработает! И выведется текст, что гет запрос был отправлен не из этой формы.
Форма:
Форму создадим аналогичную, которую мы рассматривали в пункте 3.
Лишь изменим action, name, value
<form action=»#primer_2″ method=»get»>
<input type=»text» name=»name2″ value=»Primer_2″>
<input type=»submit» value=»ОТПРАВИТЬ»>
</form>
Результат:
get запрос не был отправлен!
Методы
Метод — это HTTP-команда, с которой начинается первая строка запроса клиента.Реально используются GET, HEAD и POST. При задании имен методов учитывается регистр, поэтому GET и get различаются.
Приведенные ниже методы определены, но практически не используются:
Метод GET
GET — это запрос к серверу, который ничего не изменяет на сервере, например, выполняет считывание записи из БД.
В URL кодируются параметры запроса. Сначала идут позиционные параметры, разделенные знаком ‘/’, а затем, после символа ‘&’ — именованные в виде пар ключ-значение. Пары отделяются друг от друга амперсандом ‘&’. Например:
Максимальная длина строки параметров при реализации может быть ограничена как со стороны клиента, так и со стороны сервера.
Хотя позиционные параметры могут выглядеть, как имена каталогов и файлов, реальная интерпретация зависит от реализации на стороне сервера. Например, следующая запись может означать запуск скрипта /cgi-bin/display.pl для вывода файла /text/doc.txt (а может и не означать):
Метод POST
Метод POST это запрос к серверу, который изменяет состояние сервера, например вносит запись в БД.
Параметры запроса в методе POST могут передаваться в теле запроса. В этом случае их общая длина ничем не ограничена.
Метод HEAD
Метод HEAD аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа. Метод HEAD запрашивает только информацию заголовка о файле или ресурсе. Этот метод используется, когда клиент хочет получить информацию о документе, не получая его. Например, клиента может интересовать:
- время изменения документа;
- размер документа;
- тип документа;
- тип сервера.
Некоторые заголовки не являются обязательными и могут отсутствовать в ответе сервера.
Скачивание больших файлов с помощью 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 в оперативную память, а затем сохраняем его на диск. Не смотря на то, что этот способ не годится для скачивания больших файлов, с помощью него можно вполне сохранить простую веб страницу.
Проверить отправлен ли get запрос!?
if(!$_GET)print_r if(!$_GET){echo ‘get запрос не был отправлен’;} else{ echo’ $_GET запрос отправлен и равен :<br>’; print_r ($_GET) ; }
Ну и естественно, что выведем прямо здесь
Если
Если вы нажали кнопку отправить в верхнем пункте, либо в любом другом пункте на этой страницу, то здесь проверка на гет запрос сработает! И выведется текст, что гет запрос был отправлен не из этой формы.
Форма:
Форму создадим аналогичную, которую мы рассматривали в пункте 3.
Лишь изменим action, name, value
<form action=»#primer_2″ method=»get»>
<input type=»text» name=»name2″ value=»Primer_2″>
<input type=»submit» value=»ОТПРАВИТЬ»>
</form>
Результат:
get запрос был отправлен, но не из данного пункта! Чтобы удалить все гет запросы нажмите
Advantages of POST
Here, are benefits/ pros of using POST:
- This method helps you to determine resource URI.
- Specifying a new resource location header is very easy using location header.
- You can send a request to accept the entity as a new resource, which is identified by the URI.
- You can send user-generated data to the web server.
- It is very useful when you do not have any idea about the resource you have to keep in the URL.
- Use POST when you need the server, which controls URL generation of your resources.
- POST is a secure method as its requests do not remain in browser history.
- You can effortlessly transmit a large amount of data using post.
- You can keep the data private.
- This method can be used to send binary as well as ASCII data.
В каких случаях использовать POST и когда нужно использовать GET
В таблице ниже показаны распространенные варианты использования HTTP запросов с объяснением в чем разница между GET и POST запросами в конкретной ситуации.
Ситуация | GET | POST |
---|---|---|
Фильтр товаров |
Пользователь получит страницу с подходящими ему товарами, сможет сохранить ее в закладки, переслать ссылку на страницу с параметрами другим и вернуться к странице позже без повторного заполнения формы фильтра. |
Для повторного посещения страницы пользователь должен будет повторно заполнить форму фильтра, страницей с параметрами нельзя будет поделиться, сохранить в закладки и вернуться к странице позже без повторного заполнения формы фильтра. |
Форма авторизации |
Отсутствует защита конфиденциальной информации. Введенный пароль будет виден в адресной строке браузера, будет сохранен в истории посещенных сайтов. |
Хотя данные могут передаваться в незашифрованном виде, увидеть их можно только через инструменты разработчика или с помощью другого специального программного обеспечения. |
Онлайн заявка Оформления заказа Форма обратнойсвязи |
При повторном обращении по конечной ссылке на сервере будет произведена повторная обработка, например, будет создана повторная заявка, оформлен еще один заказ, создан еще один запрос на обратную связь. |
Повторное обращение по конечной ссылке не приведет к повторной обработке запроса с введенными ранее параметрами. |
Через гиперссылку |
Переход по гиперссылке с параметрами равнозначен отправке запроса через HTML форму. |
Нет технической возможности поместить POST запрос в гиперссылку. |
AJAX запросы | Используются оба метода. Выбор зависит от контекста. Принципы выбора метода такие же, как и для HTML форм. |
Примеры запросов POST с использованием библиотеки REQUESTS в PYTHON
Выгрузка данных из Bitrix24 с фильтром по дате из REST API
import requests # method method_name = "crm.deal.list" # Адрес api метода для запроса get url_param = "https://domain.ru/rest/1/854984lkjdsijd432/" + method_name params = {"filter": "2020-01-01T00:00:01+01:00"} print(params) response = requests.post(url_param, data = params) result = response.json() total = result print(total)
Выгрузка данных из Bitrix24 с двумя фильтрами по дате из REST API
import requests # method method_name = "crm.deal.list" # Адрес api метода для запроса get url_param = "https://domain.ru/rest/1/854984lkjdsijd432/" + method_name params = { "filter":"2019-01-01T00:00:01+01:00", "filter":"2020-01-01T00:00:01+01:00" } print(params) response = requests.post(url_param, data = params) result = response.json() total = result print(total)
cURL и другие виды HTTP запросов: PUT, DELETE, HEAD, PATCH, OPTIONS, CONNECT и т.д.
Стоп, Дмитрий, прекрати выдумывать виды запросов!
Ничего я не выдумываю: HTTP протокол предполагает множество типов HTTP запросов просто POST и GET являются более распространенными.
Чтобы отправить PUT запрос, нужно установить опцию CURLOPT_PUT таким образом:
curl_setopt($curl, CURLOPT_PUT, true);
Это делается по тому же принципу, как и CURLOPT_POST. Но что делать с остальным зоопарком запросов? Разве у cURL есть CURLOPT_DELETE или CURLOPT_HEAD? Нет.
Для того, чтобы отправлять другие виды запросов есть другая опция: CURLOPT_CUSTOMREQUEST
Вместо строки мы явно задаем имя запроса опцией CURLOPT_CUSTOMREQUEST:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD'); // или curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); // или curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); // или curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'OPTIONS');
Замечание: Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.
Использование 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;
HTML Теги
<!—><!DOCTYPE><a><abbr><acronym><address><applet><area><article><aside><audio><b><base><basefont><bdi><bdo><big><blockquote><body><br><button><canvas><caption><center><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><dir><div><dl><dt><em><embed><fieldset><figcaption><figure><font><footer><form><frame><frameset><h1> — <h6><head><header><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><menu><menuitem><meta><meter><nav><noframes><noscript><object><ol><optgroup><option><output><p><param><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><small><source><span><strike><strong><style><sub><summary><sup><svg><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><tt><u><ul><var><video>
Переменная $_REQUEST
Переменная PHP $_REQUEST содержит содержимое как $_GET, $_POST, так и $_COOKIE. Мы обсудим переменную $_COOKIE, когда мы расскажем о файлах cookie.
Переменная PHP $_REQUEST может использоваться для получения результата из данных формы, отправленных с использованием методов GET и POST.
Попробуйте следующий пример, поместив исходный код в скрипт test.php.
if( $_REQUEST || $_REQUEST ) { echo "Welcome ". $_REQUEST; echo "You are ". $_REQUEST. " years old."; exit(); } <html> <body> <form action = "<?php $_PHP_SELF ?>" method = "POST"> Name: <input type = "text" name = "name" /> Age: <input type = "text" name = "age" /> <input type = "submit" /> </form> </body> </html>
Здесь переменная $_PHP_SELF содержит имя собственного скрипта, в котором он вызывается.
Новые статьи
- Ошибки в PHP и обработка исключений — 12/04/2018 19:21
- Регулярные выражения PHP -Кванторы, мета-символы и модификаторы — 12/04/2018 19:20
- Сеансы PHP — Запуск, уничтожение, сессии без файлов cookie — 12/04/2018 19:20
- PHP-файлы cookie — Настройка, доступ и удаление cookie — 12/04/2018 19:19
- Файлы PHP и ввод-вывод — открытие, чтение, запись и закрытие файла — 12/04/2018 19:18
Предыдущие статьи
- Загрузка файлов PHP — Создание формы и сценария загрузки — 12/04/2018 19:16
- Объектно-ориентированное программирование в PHP — 12/04/2018 19:15
- Включение файла в PHP — Функция include и require — 12/04/2018 19:14
- Предопределенные переменные PHP — Суперглобальные массивы и переменные сервера — 12/04/2018 19:13
- Функции с параметрами, динамические вызовы, создание функции в PHP — 12/04/2018 19:12
- Типы операторов PHP — категории, присваивания, логические операторы — 12/04/2018 19:11
- Типы циклов PHP for, foreach, continue, break, do-while — 12/04/2018 19:10
- Принятие решений PHP — ElseIf Switch — 12/04/2018 19:09
- Типы констант PHP — Различия между константами и переменными — 12/04/2018 19:08
- Массивы PHP: Многомерные, ассоциативные и числовые массивы — 12/04/2018 19:07
- Типы переменных, область и имена переменных в PHP — 12/04/2018 19:06
- Строки в PHP, strpos, strlen, конкатенация строк — 12/04/2018 19:05
- Дата и время, получение, преобразование времени в PHP — 12/04/2018 19:03
- Обзор синтаксиса, канонические теги, комментирование PHP-кода — 12/04/2018 19:02
- Введение в PHP. Общее использование, характеристики PHP — 12/04/2018 19:01
Example of AngularJS $http.get() Service
Following is the example of using angularjs $http.get service in application.
<!DOCTYPE html>
<html>
<head>
<title>
AngularJs $http.get() Service Response Example
</title>
<script src=»http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js»></script>
<script type=»text/javascript»>
var app = angular.module(‘serviceApp’, []);
app.controller(‘serviceCtrl’, function ($scope, $http) {
$http({
method: ‘GET’,
url: ‘sample.html’
}).then(function success(response) {
$scope.myWelcome = response.data;
$scope.statusval = response.status;
$scope.statustext = response.statusText;
$scope.headers = response.headers();
}, function error(response) {
});
});
</script>
</head>
<body>
<div ng-app=»serviceApp» ng-controller=»serviceCtrl»>
<p>Hi, Guest</p>
<h1>`myWelcome`</h1>
<p>StatusCode: `statusval`</p>
<p>Status: `statustext`</p>
<p>Response Headers: `headers`</p>
</div>
</body>
</html>
If you observe above code we mentioned url as ‘sample.html’ in $http.get service. For that create one new html file in your application and give name as ‘sample.html’.
Now open ‘sample.html’ file and remove complete default code from the file and write the code like as shown below
Welcome to Tutlane.com
Now we will run and see the output of above angularjs $http.get method that would be like as shown following.
GET запрос при помощи cURL
cURL — мощный инструмент для отправки запросов. Только взгляните сколько он всего умеет.
Для того, чтобы отправить запрос, нужно создать объект при помощи функции curl_init(), а затем следует настроить его.
Все настройки, которые вы можете найти по этой ссылке. Там вы найдете опции, которые мы будем устанавливать функцией curl_setopt, в дальнейших примерах.
Пример простого GET запроса при помощи cURL:
$url = 'https://phpstack.ru/'; $headers = []; // создаем заголовки $curl = curl_init(); // создаем экземпляр curl curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POST, false); // curl_setopt($curl, CURLOPT_URL, $url); $result = curl_exec($curl);
В итоге, переменная $result снова содержит html код страницы этого сайта.
- CURLOPT_VERBOSE — установлена в true для вывода дополнительной информации. Записывает вывод в поток STDERR, или файл, указанный параметром CURLOPT_STDERR.
- CURLOPT_RETURNTRANSFER — установлена в true, для того чтобы вернуть ответ сервера. Если вам ответ сервера не нужен, то можете убрать эту опцию.
- Информация о других опциях
Если в результате сервер вернет нам редирект, то мы по нему автоматически не перейдем. А иногда это бывает полезно. Чтобы cURL автоматически шел по редиректу нужно установить опцию CURLOPT_FOLLOWLOCATION.
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
С установленной опцией скрипт автоматически перейдет по вернувшемуся редиректу и вернет ответ уже с итоговой страницы.
Заголовки запроса
В запросе клиент должен передать URI запрашиваемого документа. Это может быть сделано в абсолютной или относительной форме. В первом случае в состав URI должны входить название протокола и имя сервера.
Во втором случае передается только путь к документу.
В этом случае имя и порт хоста, может быть передано в строке заголовка Host:
Наличие имени хоста необходимо для обращений к прокси-серверу, или для обращения к одному из виртуальных хостов размещенных на одном сервере. Если хост, заданный одним из двух способов, не существует, то сервер возвращает ответ 400- Bad Request.
Поля заголовка запроса позволяют клиенту передавать серверу дополнительную информацию о запросе и о самом клиенте.
Передача данных в ответе сервера
Несколько заголовков используемых в ответе сервера, позволяют точно описать формат и размер передаваемых данных.
Content-Type: Тип сообщения, аналогичен типу содержимого в стандарте MIME и указывается в формате тип/подтип.
Серверы используют типы сообщения в заголовках Content-Type, чтобы сообщить клиенту о том, в каком формате передается прилагаемое содержимое
В типе сообщения для текстовых форматов может быть указана использованная кодировка.
Content-Encoding: Для 8 битового протокола HTTP, данный заголовок означает, что данные дополнительно закодированы, например сжаты. Определены три типа кодирования gzip, compress, deflate, что соответствует форматам программ gzip, compress и библиотеки zlib. Например:
Большое значение в реализации протокола HTTP имеет уведомление клиента о размере данных в теле ответа, т.к. в силу 8 битовости протокола тело ответа не может сопровождаться каким либо ограничителем.
Content-Length: Длина тела сообщения. В протоколе HTTP/1.0 это была единственная возможность передать клиенту информацию о размере данных.
Кодирование данных кусками (chunced) было введено в HTTP/1.1. В заголовках ответа должна присутствовать строка
А тело сообщения строится по следующим правилам
Признаком завершения передачи является кусок нулевой длины.
Следует отметить, что символы в конце куска, не являются его частью.
Подобное кодирование очень удобно в тех случаях, когда размер данных заранее неизвестен, и достаточно велик.
Еще одной возможностью для кодирования данных является использование для тела сообщения типа multipart/bytranges – эквивалентного MIME multipart/*
Если размер сообщения не указан, не используется кодирование кусками и тип тела сообщения не multipart/bytranges, то клиент определяет конец тела ответа по закрытию TCP соединения.
Difference between a GET and POST
Here are the major differences between GET and POST:
GET | POST |
---|---|
In GET method, values are visible in the URL. | In POST method, values are not visible in the URL. |
GET has a limitation on the length of the values, generally 255 characters. | POST has no limitation on the length of the values since they are submitted via the body of HTTP. |
GET performs are better compared to POST because of the simple nature of appending the values in the URL. | It has lower performance as compared to GET method because of time spent in including POST values in the HTTP body. |
This method supports only string data types. | This method supports different data types, such as string, numeric, binary, etc. |
GET results can be bookmarked. | POST results cannot be bookmarked. |
GET request is often cacheable. | The POST request is hardly cacheable. |
GET Parameters remain in web browser history. | Parameters are not saved in web browser history. |
Пример использования GET метода!
Еще, как то мы делали пример, совсем простой, чтобы можно было понять, как работает метод get:
1. 2.
Вывод абсолютно аналогичный. что и при выводе get запроса выше..
Если интересен код данной страницы, то вот:
<!DOCTYPE html>
<html lang=»en»>
<head>
<meta charset=»UTF-8″>
<title>Простой пример использования GET</title>
<style>red{ color: red; } </style>
</head>
<body>
<kod>Ссылка: <a href=»https://dwweb.ru/__a-data/__all_for_scripts/__examples/php/get/get.php?primer=test» target=»_blank»>https://dwweb.ru/__a-data/__all_for_scripts/__examples/php/get/get.php?primer=test</a> </kod><br>
<?
if($_GET)
{
if($_GET == «test»)
{
echo «Вы нажали на ссылку и в условии проверки есть проверка на то, что передано в строке…<br>
<red>Данная переменная primer существует + <br><red>Она равна слову test</red>»;
}
else
{
echo «Переданные данные не верны!»;
}
}
else
{
echo «И обратите внимание на адресную строку, скрипт не сработал, потому, что ни переменной, ни параметра GET в строке нет «;
}
?>
</body>
</html>