Расшифровка 55 состояний прикладного протокола HTTP (протокол передачи гипертекста): от информационных сообщений до ошибок.
Во время запроса информации с удаленного веб-сервера может возникнуть ошибка. Тогда веб-сервер посылает в ответ код ошибки HTTP. Например 404 — Not Found (ресурс не найден).
Коды состояния HTTP состоят из трех цифр от 100 и до 510. Они делятся на следующие группы:
- Информационные (100-105).
- Успешные (200-226).
- Перенаправление (300-307).
- Ошибка клиента (400-499).
- Ошибка сервера (500-510).
Чтобы получить сведения об ошибке, введите её код в поле поиска по странице. Для этого нажмите сочетание клавиш CTRL + F и укажите номер.
100
Continue
Cервер удовлетворён начальными сведениями о запросе, клиент может продолжать пересылать заголовки. Появился в HTTP/1.1.
101
Switching Protocols
Сервер предлагает перейти на более подходящий для указанного ресурса протокол; список предлагаемых протоколов сервер обязательно указывает в поле заголовкаUpdate. Если клиента это заинтересует, то он посылает новый запрос с указанием другого протокола. Появился в HTTP/1.1.
102
Processing
Запрос принят, но на его обработку понадобится длительное время. Используется сервером, чтобы клиент не разорвал соединение из-за превышения времени ожидания. Клиент при получении такого ответа должен сбросить таймер и дожидаться следующей команды в обычном режиме. Появился в WebDAV.
200
ОК
Успешный запрос. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения. Появился в HTTP/1.0.
201
Created
В результате успешного выполнения запроса был создан новый ресурс. Сервер должен указать его местоположение в заголовке Location. Серверу рекомендуется[источник не указан 336 дней] ещё указывать в заголовке характеристики созданного ресурса (например, в поле Content-Type). Если сервер не уверен, что ресурс действительно будет существовать к моменту получения данного сообщения клиентом, то лучше использовать ответ с кодом 202. Появился в HTTP/1.0.
202
Accepted
Запрос был принят на обработку, но она не завершена. Клиенту не обязательно дожидаться окончательной передачи сообщения, так как может быть начат очень долгий процесс. Появился в HTTP/1.0.
203
Non-Authoritative Information
Аналогично ответу 200, но в этом случае передаваемая информация была взята не из первичного источника (резервной копии, другого сервера и т. д.) и поэтому может быть неактуальной. Появился в HTTP/1.1.
204
No Content
Сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения. Клиент не должен обновлять содержимое документа, но может применить к нему полученные метаданные. Появился в HTTP/1.0.
205
Reset Content
Сервер обязывает клиента сбросить введённые пользователем данные. Тела сообщения сервер при этом не передаёт и документ обновлять не обязательно. Появился в HTTP/1.1.
206
Partial Content
Сервер удачно выполнил частичный GET-запрос, возвратив только часть сообщения. В заголовке Content-Range сервер указывает байтовые диапазоны содержимого. Особое внимание при работе с подобными ответами следует уделить кэшированию. Появился в HTTP/1.1. (подробнее…)
207
Multi-Status
Сервер передаёт результаты выполнения сразу нескольких независимых операций. Они помещаются в само тело сообщения в виде XML-документа с объектом multistatus. Не рекомендуется размещать в этом объекте статусы из серии 1xx из-за бессмысленности и избыточности. Появился в WebDAV.
226
IM Used
Заголовок A-IM от клиента был успешно принят и сервер возвращает содержимое с учётом указанных параметров. Введено в RFC 3229 для дополнения протокола HTTP поддержкой дельта-кодирования.
300
Multiple Choices
По указанному URI существует несколько вариантов предоставления ресурса по типу MIME, по языку или по другим характеристикам. Сервер передаёт с сообщением список альтернатив, давая возможность сделать выбор клиенту автоматически или пользователю. Появился в HTTP/1.0.
301
Moved Permanently
Запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка. Некоторые клиенты некорректно ведут себя при обработке данного кода. Появился в HTTP/1.0.
302
Found, Moved Temporarily
Запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, приуправляемом сервером согласовании содержимого. Некоторые клиенты некорректно ведут себя при обработке данного кода. Введено в HTTP/1.0.
303
See Other
Документ по запрошенному URI нужно запросить по адресу в поле Location заголовка с использованием метода GET несмотря даже на то, что первый запрашивался иным методом. Этот код был введён вместе с 307-ым для избежания неоднозначности, чтобы сервер был уверен, что следующий ресурс будет запрошен методом GET. Например, на веб-странице есть поле ввода текста для быстрого перехода и поиска. После ввода данных браузер делает запрос методом POST, включая в тело сообщения введённый текст. Если обнаружен документ с введённым названием, то сервер отвечает кодом 303, указав в заголовке Location его постоянный адрес. Тогда браузер гарантировано его запросит методом GET для получения содержимого. В противном случае сервер просто вернёт клиенту страницу с результатами поиска. Введено в HTTP/1.1.
304
Not Modified
Сервер возвращает такой код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента. При этом сообщение сервера не должно содержать тела. Появился в HTTP/1.0.
305
Use Proxy
Запрос к запрашиваемому ресурсу должен осуществляться через прокси-сервер, URI которого указан в поле Location заголовка. Данный код ответа могут использовать только исходные HTTP-сервера (не прокси). Введено в HTTP/1.1.
306
(зарезервировано)
использовавшийся раньше код ответа, в настоящий момент зарезервирован. Упомянут в RFC 2616 (обновление HTTP/1.1).
307
Temporary Redirect
Запрашиваемый ресурс на короткое время доступен по другому URI, указанный в поле Location заголовка. Этот код был введён вместе с 303 вместо 302-го для избежания неоднозначности. Введено в RFC 2616 (обновление HTTP/1.1).
400
Bad Request
Сервер обнаружил в запросе клиента синтаксическую ошибку. Появился в HTTP/1.0.
401
Unauthorized
Для доступа к запрашиваемому ресурсу требуется аутентификация. В заголовке ответ должен содержать поле WWW-Authenticate с перечнем условий аутентификации. Клиент может повторить запрос, включив в заголовок сообщения поле Authorization с требуемыми для аутентификации данными.
402
Payment Required
Предполагается использовать в будущем. В настоящий момент не используется. Этот код предусмотрен для платных пользовательских сервисов, а не для хостинговыхкомпаний. Имеется в виду, что эта ошибка не будет выдана хостинговым провайдером в случае просроченной оплаты его услуг. Зарезервирован, начиная с HTTP/1.1.
403
Forbidden
Сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу. Если для доступа к ресурсу требуется аутентификация средствами HTTP, то сервер вернёт ответ 401 или 407 при использовании прокси. В противном случае ограничения были заданы администратором сервера или разработчиком веб-приложения и могут быть любыми в зависимости от возможностей используемого программного обеспечения. В любом случае клиенту следует сообщить причины отказа в обработке запроса. Наиболее вероятными причинами ограничения может послужить попытка доступа к системным ресурсам веб-сервера (например, файлам .htaccess или .htpasswd) или к файлам, доступ к которым был закрыт с помощью конфигурационных файлов, требование аутентификации не средствами HTTP, например, для доступа к системе управления содержимым или разделу для зарегистрированных пользователей либо сервер не удовлетворён IP-адресом клиента, например, при блокировках. Появился в HTTP/1.0.
404
Not Found
Самая распространенная ошибка при пользовании Интернетом, основная причина — ошибка в написании адреса Web-страницы. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI. Если серверу известно, что по этому адресу был документ, то ему желательно использовать код 410. Ответ 404 может использоваться вместо 403, если требуется тщательно скрыть от посторонних глаз определённые ресурсы. Появился в HTTP/1.0.
405
Method Not Allowed
Указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой. Эту ошибку сервер должен возвращать, если метод ему известен, но он не применим именно к указанному в запросе ресурсу, если же указанный метод не применим на всём сервере, то клиенту нужно вернуть код 501 (Not Implemented). Появился в HTTP/1.1.
406
Not Acceptable
Запрошенный URI не может удовлетворить переданным в заголовке характеристикам. Если метод был не HEAD, то сервер должен вернуть список допустимых характеристик для данного ресурса. Появился в HTTP/1.1.
407
Proxy Authentication Required
Ответ аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Механизм аналогичен идентификации на исходном сервере. Появился в HTTP/1.1.
408
Request Timeout
Время ожидания сервером передачи от клиента истекло. Клиент может повторить аналогичный предыдущему запрос в любое время. Например, такая ситуация может возникнуть при загрузке на сервер объёмного файла методом POST или PUT. В какой-то момент передачи источник данных перестал отвечать, например, из-за повреждения компакт-диска или потеря связи с другим компьютером в локальной сети. Пока клиент ничего не передаёт, ожидая от него ответа, соединение с сервером держится. Через некоторое время сервер может закрыть соединение со своей стороны, чтобы дать возможность другим клиентам сделать запрос. Этот ответ не возвращается, когда клиент принудительно остановил передачу по команде пользователя или соединение прервалось по каким-то иным причинам, так как ответ уже послать невозможно. Появился в HTTP/1.1.
409
Conflict
Запрос не может быть выполнен из-за конфликтного обращения к ресурсу. Такое возможно, например, когда два клиента пытаются изменить ресурс с помощью метода PUT.Появился в HTTP/1.1.
410
Gone
Такой ответ сервер посылает, если ресурс раньше был по указанному URL, но был удалён и теперь недоступен. Серверу в этом случае неизвестно и местоположение альтернативного документа, например, копии). Если у сервера есть подозрение, что документ в ближайшее время может быть восстановлен, то лучше клиенту передать код 404. Появился в HTTP/1.1.
411
Length Required
Для указанного ресурса клиент должен указать Content-Length в заголовке запроса. Без указания этого поля не стоит делать повторную попытку запроса к серверу по данному URI. Такой ответ естественен для запросов типа POST и PUT. Например, если по указанному URI производится загрузка файлов, а на сервере стоит ограничение на их объём. Тогда разумней будет проверить в самом начале заголовок Content-Length и сразу отказать в загрузке, чем провоцировать бессмысленную нагрузку, разрывая соединение, когда клиент действительно пришлёт слишком объёмное сообщение. Появился в HTTP/1.1.
412
Precondition Failed
Возвращается, если ни одно из условных полей заголовка[неизвестный термин] запроса не было выполнено. Появился в HTTP/1.1.
413
Request Entity Too Large
Возвращается в случае, если сервер отказывается обработать запрос по причине слишком большого размера тела запроса. Сервер может закрыть соединение, чтобы прекратить дальнейшую передачу запроса. Если проблема временная, то рекомендуется в ответ сервера включить заголовок Retry-After с указанием времени, по истечении которого можно повторить аналогичный запрос. Появился в HTTP/1.1.
414
Request-URL Too Long
Сервер не может обработать запрос из-за слишком длинного указанного URL. Такую ошибку можно спровоцировать, например, когда клиент пытается передать длинные параметры через метод GET, а не POST. Появился в HTTP/1.1.
415
Unsupported Media Type
По каким-то причинам сервер отказывается работать с указанным типом данных при данном методе. Появился в HTTP/1.1.
416
Requested Range Not Satisfiabl
В поле Range заголовка запроса был указан диапазон за пределами ресурса и отсутствует поле If-Range. Если клиент передал байтовый диапазон, то сервер может вернуть реальный размер в поле Content-Range заголовка. Данный ответ не следует использовать при передаче типа multipart/byteranges[источник не указан 336 дней]. Введено в RFC 2616 (обновление HTTP/1.1).
417
Expectation Failed
По каким-то причинам сервер не может удовлетворить значению поля Expect заголовка запроса. Введено в RFC 2616 (обновление HTTP/1.1).
422
Unprocessable Entity
Сервер успешно принял запрос, может работать с указанным видом данных, в теле запроса XML-документ имеет верный синтаксис, но имеется какая-то логическая ошибка, из-за которой невозможно произвести операцию над ресурсом. Введено в WebDAV.
423
Locked
Целевой ресурс из запроса заблокирован от применения к нему указанного метода. Введено в WebDAV.
424
Failed Dependency
Реализация текущего запроса может зависеть от успешности выполнения другой операции. Если она не выполнена и из-за этого нельзя выполнить текущий запрос, то сервер вернёт этот код. Введено в WebDAV.
425
Unordered Collection —
Посылается, если клиент послал запрос, обозначив положение в неотсортированной коллекции или используя порядок следования элементов, отличный от серверного[уточнить]. Введено в черновике по WebDAV Advanced Collections Protocol[14].
426
Upgrade Required
Сервер указывает клиенту на необходимость обновить протокол. Заголовок ответа должен содержать правильно сформированные поля Upgrade и Connection. Введено вRFC 2817 для возможности перехода к TLS посредством HTTP.
449
Retry With
Возвращается сервером, если для обработки запроса от клиента поступило недостаточно информации. При этом в заголовок ответа помещается поле Ms-Echo-Request. Введено корпорацией Microsoft для WebDAV. В настоящий момент как минимум используется программой Microsoft Money.
456
Unrecoverable Error
Возвращается сервером, если обработка запроса вызывает некорректируемые сбои в таблицах баз данных[источник не указан 336 дней]. Введено корпорацией Microsoftдля WebDAV.
500
Internal Server Error
Любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса. Появился в HTTP/1.0.
501
Not Implemented
Сервер не поддерживает возможностей, необходимых для обработки запроса. Типичный ответ для случаев, когда сервер не понимает указанный в запросе метод. Если же метод серверу известен, но он не применим к данному ресурсу, то нужно вернуть ответ 405. Появился в HTTP/1.0.
502
Bad Gateway
Сервер, выступая в роли шлюза или прокси-сервера, получил недействительное ответное сообщение от вышестоящего сервера. Появился в HTTP/1.0.
503
Service Unavailable
Сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее). В поле Retry-After заголовка сервер может указать время, через которое клиенту рекомендуется повторить запрос. Хотя во время перегрузки очевидным кажется сразу разрывать соединение, эффективней может оказаться установка большого значения поля Retry-After для уменьшения частоты избыточных запросов. Появился в HTTP/1.0.
504
Gateway Timeout
Сервер в роли шлюза или прокси-сервера не дождался ответа от вышестоящего сервера для завершения текущего запроса. Появился в HTTP/1.1.
505
HTTP Version Not Supported
Сервер не поддерживает или отказывается поддерживать указанную в запросе версию протокола HTTP. Появился в HTTP/1.1.
506
Variant Also Negotiates
В результате ошибочной конфигурации выбранный вариант указывает сам на себя, из-за чего процесс связывания прерывается. Экспериментальное. Введено в RFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation.
507
Insufficient Storage
Не хватает места для выполнения текущего запроса. Проблема может быть временной. Введено в WebDAV.
509
Bandwidth Limit Exceeded
Используется при превышении веб-площадкой отведённого ей ограничения на потребление трафика. В данном случае владельцу площадки следует обратиться к своему хостинг-провайдеру. В настоящий момент данный код не описан ни в одном RFC и используется только модулем «bw/limited», входящим в панель управления хостингом cPanel, где и был введён.
510
Not Extended
На сервере отсутствует расширение, которое желает использовать клиент. Сервер может дополнительно передать информацию о доступных ему расширениях. Введено в RFC 2774 для дополнения протокола HTTP поддержкой расширений.
From SA-MP Wiki
Jump to: navigation, search
Description:
Sends a threaded HTTP request.
This function was added in SA-MP 0.3b and will not work in earlier versions! |
Parameters:
(index, type, url[], data[], callback[])
index | ID used to differentiate requests that are sent to the same callback (useful for playerids) |
type | The type of request you wish to send. |
url[] | The URL you want to request. (Without ‘http://’) |
data[] | Any POST data you want to send with the request. |
callback[] | Name of the callback function you want to use to handle responses to this request. |
Return Values:
1 on success, 0 on failure
Request types
HTTP_GET — Sends a regular HTTP request.
HTTP_POST — Sends a HTTP request with POST data.
HTTP_HEAD — Sends a regular HTTP request, but ignores any response data — returning only the response code.
Response Codes
HTTP_ERROR_BAD_HOST 1 HTTP_ERROR_NO_SOCKET 2 HTTP_ERROR_CANT_CONNECT 3 HTTP_ERROR_CANT_WRITE 4 HTTP_ERROR_CONTENT_TOO_BIG 5 HTTP_ERROR_MALFORMED_RESPONSE 6
Note |
As well as the response codes listed above, there are also all of the typical HTTP responses such as 404 (Page not found), 500 (Server error) or 403 (forbidden) |
Example Usage:
forward MyHttpResponse(index, response_code, data[]); public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp("/hello",cmdtext,true)) { HTTP(playerid, HTTP_GET, "kc.gd/hello.txt", "", "MyHttpResponse"); return 1; } return 0; } public MyHttpResponse(index, response_code, data[]) { // In this callback "index" would normally be called "playerid" ( if you didn't get it already :) ) new buffer[ 128 ]; if(response_code == 200) //Did the request succeed? { //Yes! format(buffer, sizeof(buffer), "The URL replied: %s", data); SendClientMessage(index, 0xFFFFFFFF, buffer); } else { //No! format(buffer, sizeof(buffer), "The request failed! The response code was: %d", response_code); SendClientMessage(index, 0xFFFFFFFF, buffer); } }
Описание:
Вызывается при завершении HTTP-запроса. Данная функция не имеет конкретного названия, т.к. оно указывается пользователем (см. пример).
Параметры:
(index, response_code, data[])
index | Индекс, указанный 1-м параметром в вызове функции HTTP() .
|
response_code | Код ответа на HTTP-запрос. Помимо общепринятых кодов в SA-MP также различаются дополнительные:
|
data[] | Данные, полученные в ответ на запрос. |
Возвращаемое значение:
Возвращаемое значение не обрабатывается сервером.
Пример использования:
CMD:http(playerid, params[])
{
HTTP(playerid, HTTP_GET, «pawn-lang.org», «», «MyHttpResponse»);
return SendClientMessage(playerid, —1, «Запрос отправлен.»);
}
// Вместо «MyHttpResponse» можно задать функции любое другое название,
// главное не забыть указать то же самое название в вызове функции HTTP().
forward MyHttpResponse(index, response_code, data[]);
public MyHttpResponse(index, response_code, data[])
{
new string[144];
// Если HTTP-запрос совершился успешно (код 200), выведем ответ сайта, иначе — сообщим код ошибки.
if (response_code == 200)
format(string, sizeof(string), «Ответ сайта: %s», data);
else
format(string, sizeof(string), «Неудача; запрос завершился с кодом %d», response_code);
// В параметре index содержится ID игрока, который был передан 1-м параметром в вызове HTTP().
return SendClientMessage(index, —1, string);
}
См. также:
- HTTP
#1
Отправлено 25 июня 2020 — 15:26
- Прохожий
-
Приветствую всех юзеров Pawn-Wiki. Мне очень нужна помощь! При попытке отправить код на ВК страницу (через VK Security) в консоли пишет: [VK Security] Сбой в запросе, код ответа: 400. Что только не пытался сделать, всё в пустую. Когда захожу на сайт сам и пишу POST-запрос то всё приходит. Код прилагаю:
SendVKMessage(playerid,message[],vkid) { format(glstr, sizeof(glstr), "домен/vk_sender.php?message=%s&to=%d", message, vkid); HTTP(playerid, HTTP_POST, glstr, "" ,"@__SendMessageResponse"); return 1; } @__SendMessageResponse(index, response_code, data[]); @__SendMessageResponse(index, response_code, data[]) { if(response_code == 200) return print("[VK Security] Сообщение отправлено!"); else printf("[VK Security] Сбой в запросе, код ответа: %d", response_code); return 1; }
Сообщение отредактировал MaksDroid: 25 июня 2020 — 15:26
0
#2
Отправлено 25 июня 2020 — 19:30
- Пуфнеры вперед
-
Скорее всего там идет редирект на HTTPS, а HTTP() не умеет работать с HTTPS
#3
Отправлено 25 июня 2020 — 19:34
- Местный
-
Скинь домен
И ты не пробовал вручную проверить отправку?
0
#4
Отправлено 26 июня 2020 — 09:14
- Профессионал
-
GAWESOME (25 июня 2020 — 19:30) писал:
Скорее всего там идет редирект на HTTPS, а HTTP() не умеет работать с HTTPS
Скорее всего так и есть.
Автору:
Вот плагин, который поддерживает HTTPS (но нужно будет ковыряться с JSON, хотя это даже на пользу)
Сообщение отредактировал MassonN: 26 июня 2020 — 09:17
0
#5
Отправлено 26 июня 2020 — 09:43
- Evil Scripter
-
Судя по этой строке
format(glstr, sizeof(glstr), "домен/vk_sender.php?message=%s&to=%d", message, vkid);
он сначала обращается к скрипту на своём сайте/хостинге. И уже сам сайт должен отправлять запрос в HTTPS, ибо именно для этого подобные действия обычно и делают, как в случае с той же отправкой сообщения на почту.
Тут следует у автора уточнить: а выполняет ли скрипт на сайте свои действия, если к нему обратиться из браузера? Не просто смотреть на код результата, а именно на функционал, который ты заложил в PHP-скрипт. Ибо вполне возможно, что ты либо старым API VK пользуешься, либо как-то криво авторизируешься/пытаешься получить информацию, требующую авторизации.
Сообщение отредактировал DeimoS: 26 июня 2020 — 09:44
0
#6
Отправлено 26 июня 2020 — 14:17
- Профессионал
-
DeimoS (26 июня 2020 — 09:43) писал:
Нажмите сюда, чтобы прочитать это сообщение. [
Показать
]
опять же, его сайт также может выполнять переадресацию на HTTPS. В любом случае, согласен, нужно пробовать отправить конкретно запрос с браузера и посмотреть на каком этапе возникает ошибка.
0
#7
Отправлено 26 июня 2020 — 16:27
- Evil Scripter
-
MassonN (26 июня 2020 — 14:17) писал:
опять же, его сайт также может выполнять переадресацию на HTTPS.
Сайт и должен отправлять HTTPS-запрос. В этом и смысл вызова скрипта. Но серверу на этот запрос совершенно всё равно. Как, собственно, и на то, что делает скрипт. Он лишь вызывает скрипт через HTTP-запрос, передавая ему определённую информацию, а дальше ждёт от него ответ.
0
#8
Отправлено 26 июня 2020 — 16:57
- Профессионал
-
DeimoS (26 июня 2020 — 16:27) писал:
Нажмите сюда, чтобы прочитать это сообщение. [
Показать
]
я имею ввиду сам сайт переадресует запрос с сервера на https и отправит запрос обратно к серверу HTTPS
0
#9
Отправлено 26 июня 2020 — 17:14
- Evil Scripter
-
MassonN (26 июня 2020 — 16:57) писал:
я имею ввиду сам сайт переадресует запрос с сервера на https и отправит запрос обратно к серверу HTTPS
Он никакой запрос обратно серверу не отправляет. И тем более не меняет протокол. Как ты с сервера к сайту по HTTP обратился, так эта «сессия» и висит открытой, пока скрипт не выполнится и сайт не отправит ответ (или время ожидания ответа не истечёт). Суть этих протоколов и состоит в том, чтоб когда один из серверов получал запрос от другого, первоначальный сервер понимал какому серверу, как и какой ответ отправлять.
UPD: И сайт никакой переадресацией запросов от сервера не занимается. Ещё раз: суть кода заключается в том, что ты HTTP-запросом вызываешь скрипт на хостинге сайта и передаёшь в него определённую информацию. Сам скрипт, при этом, с этой информацией может сделать всё, что угодно: и HTTPS-запрос отправить, и арифметические операции провести, и заняться форматированием строки — без разницы. Главное, что когда скрипт закончит свою работу, он сформирует определённый результат и отправит его в виде ответа. Соответственно, если скрипт посылал HTTPS-запрос, то сначала он сам получит ответ от сервера, куда тот запрос посылался, а потом этот ответ отправит уже твоему SA-MP серверу, с которого ты посылал HTTP-запрос. Можно, конечно, реализовать подобие переадресации, но тогда запрос на «переадресацию» придётся передавать в качестве параметра HTTP-запроса, вызывая скрипт, который уже извлечёт запрос из параметра и отправит его куда укажешь.
Сообщение отредактировал DeimoS: 26 июня 2020 — 17:20
0
- ← Предыдущая тема
- Вопросы по скриптингу
- Следующая тема →
- Вы не можете создать новую тему
-
Тема закрыта
1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей
Отправляет HTTP запрос (потоковый).
(index, type, url[], data[], callback[])
index — ID для разделений HTTP запросов, если они отправляются на один и тот же обработчик (коллбэк).
type — Тип HTTP-запроса (будут указаны ниже).
url[] — URL адрес для отправки HTTP запроса (без «http://»).
data[] — Любые POST-данные, которые вы хотите отправить с запросом (использовать при отправке с типом «POST»).
callback[] — Обратный вызов (коллбэк), в котором вы хотите обрабатывать ответы от сервера.
ВОЗВРАЩАЕМЫЕ ФУНКЦИЕЙ ЗНАЧЕНИЯ:
- 1 — выполнено успешно.
- 0 — успешно не выполнено.
ТИПЫ ЗАПРОСОВ:
- HTTP_GET — отправляет обычный HTTP запрос.
- HTTP_POST — отправляет HTTP запрос с POST данными.
- HTTP_HEAD — Отправляет обычный HTTP-запрос, но игнорирует любые данные ответа — возвращает только код ответа.
КОДЫ ОТВЕТОВ ОТ ОПРАШИВАЕМОГО РЕСУРСА:
HTTP_ERROR_BAD_HOST 1 // невозможно соединиться: URL указан неверно HTTP_ERROR_NO_SOCKET 2 // невозможно соединиться: нет соединения с интернетом, или сервер не может открыть сокет для соединения HTTP_ERROR_CANT_CONNECT 3 // нет соединения HTTP_ERROR_CANT_WRITE 4 // нет прав на запись HTTP_ERROR_CONTENT_TOO_BIG 5 // содержимое слишком большое (невозможно столько записать в data[]) HTTP_ERROR_MALFORMED_RESPONSE 6 // неверный запрос // ОБЩИЕ ТИПИЧНЫЕ HTTP КОДЫ, которые также используются в response_code 200 - OK - выполнено успешно 404 - Not Found (не найдено) 301 / 302 - переадресация (временно / постоянно) 500 - Internal Error - ошибка сервера (не игрового, а опрашиваемого) 403 - Forbidden (доступ воспрещен)
ПРИМЕР ИСПОЛЬЗОВАНИЯ:
forward MyHttpResponse(index, response_code, data[]); public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp("/hello",cmdtext,true)) { HTTP(playerid, HTTP_GET, "kc.gd/hello.txt", "", "MyHttpResponse"); return 1; } return 0; } public MyHttpResponse(index, response_code, data[]) { new buffer[ 128 ]; if(response_code == 200) //является ли запрос успешным? { //ДА! format(buffer, sizeof(buffer), "URL ответил вот что: %s", data); SendClientMessage(index, 0xFFFFFFFF, buffer); } else // а если не так { //НИТ! format(buffer, sizeof(buffer), "Сервер ответил с ошибкой! Код ответа (HTTP): %d", response_code); SendClientMessage(index, 0xFFFFFFFF, buffer); } }