API UO HTTP_Get - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.HTTP_Get

ClassicUO / Basic IDE

Оглавление · Алфавитный указатель · HTTP

Performs an HTTP GET. The one-argument form returns/uses the registered text semantics; the LStream overload writes raw response bytes to a supported Basic MemoryStream/File target.

Синтаксис

UO.HTTP_Get(URL:Any) -> Unit
UO.HTTP_Get(URL:Any, LStream:Any) -> Unit

Регистр имени не важен. Any — динамическое значение Basic; Unit — отсутствие возвращаемого значения. Integer — знаковое 32-битное число, Decimal — число с плавающей точкой. Правила типов, serial, индексов и ожиданий.

Параметры

Имя Назначение
URL Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
LStream Basic MemoryStream/File-compatible output target for raw response bytes.

Параметры обязательны внутри каждой показанной сигнатуры. Опустить аргумент можно только при наличии более короткой перегрузки; пропуск позиции посередине не подразумевается.

Допустимые значения

URL — Quoted BASIC string. Fixed keywords/enums, when present, are listed in Behavior/Notes.

  • LStream — MemoryStream(), File(path), or 0/omitted only where the signature permits it.

Пропущенные аргументы

Omitting LStream stores the response body in the runtime HTTP body buffer; supplying a stream writes raw response bytes to it.

Ограничения

Network errors/timeouts remain runtime failures. For binary payloads use LStream/MemoryStream rather than converting bytes through UTF-8 text.

Возвращает: Unit — значения нет. Выполняйте вызов отдельной строкой; его нельзя использовать как проверку успеха. Эффект и ограничения зависят от команды.

Примеры

Каждый блок — самостоятельный скрипт из мануала проекта. Параметры демонстрационного объекта/контейнера и условия действия необходимо сопоставить с вашей игровой ситуацией.

Пример 1

SUB Main()
    UO.HTTP_Get('https://example.com/')
END SUB

Пример 2

SUB Main()
    VAR stream = MemoryStream()
    UO.HTTP_Get('https://example.com/file.bin', stream)
END SUB

Пример 3

SUB Main()
    UO.HTTP_Get('https://example.com/')
END SUB

Пример 4

SUB Main()
    VAR arg1 = 'https://example.com/' # URL
    VAR arg2 = 2 # LStream
    UO.HTTP_Get(arg1, arg2)
END SUB

Пример 5

SUB Main()
    VAR arg1 = 'https://example.com/' # URL
    UO.HTTP_Get(arg1)
END SUB

Пример 6

SUB ReadResult()
    VAR arg1 = 'https://example.com/' # URL
    UO.HTTP_Get(arg1)
END SUB

SUB Main()
    ReadResult()
END SUB
Реализация и проверка контракта
  • InjectionScript.Runtime.InjectionApiUO+<>c__DisplayClass38_0.<RegisterStealthCompatibility>b__0

Соответствующая ветвь совместимого обработчика в InjectionApiUO.cs. Arg(i)/Text(i) читают позицию с нуля; bridge обращается к клиенту. Прямые типизированные перегрузки перечислены выше и могут иметь отдельный маршрут.

{
                    string[] response = bridge.HttpRequest("GET", Text(0), string.Empty);
                    state.HttpHeader = response.Length > 1 ? response[1] : string.Empty;

                    bool hasStream = arguments.Length > 1
                        && !(arguments[1].Kind == InjectionValueKind.Integer && arguments[1].Integer == 0)
                        && arguments[1].Kind != InjectionValueKind.Unit;
                    if (!hasStream)
                    {
                        state.HttpBody = response.Length > 0 ? response[0] : string.Empty;
                        return InjectionValue.Unit;
                    }

                    if (arguments[1].Kind != InjectionValueKind.Object)
                        throw new NativeSubrutineException("UO.HTTP_Get: LStream must be MemoryStream(), File(path), 0, or omitted.");

                    byte[] raw = response.Length > 3 && !string.IsNullOrEmpty(response[3])
                        ? Convert.FromBase64String(response[3])
 : Array.Empty<byte>();
                    if (arguments[1].Object is MemoryStreamObject memoryStream)
                        memoryStream.ReplaceBytes(raw);
                    else if (arguments[1].Object is FileObject fileStream)
                        fileStream.ReplaceBytes(raw);
                    else
                        throw new NativeSubrutineException("UO.HTTP_Get: LStream object must be MemoryStream() or File(path).");

                    // Stealth writes the raw payload to LStream instead of its internal
                    // string buffer when a stream is supplied.
                    state.HttpBody = string.Empty;
                    return InjectionValue.Unit;
                }

Источник реестра и отчёт сверки. Примеры проверяются загрузчиком/парсером включённого runtime. Действия на игровом сервере этой проверкой не исполняются.

⚠️ **GitHub.com Fallback** ⚠️