Garry's Mod Wiki

Revision Difference

http.Fetch#551123

<function name="Fetch" parent="http" type="libraryfunc"> <description> Launches an asynchronous **GET** request to a HTTP server. HTTP requests returning a status code >= `400` are still considered a success and will call the <page text="onSuccess">Structures/HTTPRequest</page> callback. The <page text="onFailure">Structures/HTTPRequest</page> callback is usually only called on DNS or TCP errors (e.g. the website is unavailable or the domain does not exist). A rough overview of possible <page text="onFailure">Structures/HTTPRequest</page> messages: * `invalid url` - Invalid/empty url ( no request was attempted ) * `invalid request` - Steam HTTP lib failed to create a HTTP request * `error` - OnComplete callback's second argument, `bError`, is `true` * `unsuccessful` - OnComplete's first argument, `pResult->m_bRequestSuccessful`, returned `false` <bug issue="2232">This cannot send or receive multiple headers with the same name.</bug> <bug issue="4133">This function fails with an `invalid url` error if the substring `"10."` appears anywhere in the URL, when `-allowlocalhttp` is not active. Where possible, this can be worked around by encoding the `.` character as `%2E`.</bug>⤶ <bug issue="4133">This function fails with an `invalid url` error if the substring `"10."` appears anywhere in the URL, when `-allowlocalhttp` is not active. Where possible, this can be worked around by encoding the `.` character as `%2E`. **This is fixed in the next update.**</bug>⤶ <note>HTTP-requests that respond with a large body may return an `unsuccessful` error. Try using the [Range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range) header to download the file in chunks.</note> <note> HTTP-requests to destinations on private networks (such as `192.168.0.1`) won't work. <br/> To enable HTTP-requests to destinations on private networks use <page>Command Line Parameters</page> `-allowlocalhttp`. </note> </description> <realm>Shared and Menu</realm> <file line="18-L44">lua/includes/modules/http.lua</file> <args> <arg name="url" type="string">The URL of the website to fetch.</arg> <arg name="onSuccess" type="function" default="nil">Function to be called on success. Arguments are * <page>string</page> body * <page>string</page> size - equal to <page>string.len</page>(body). * <page>table</page> headers * <page>number</page> code - The HTTP success code.</arg> <arg name="onFailure" type="function" default="nil">Function to be called on failure. Arguments are * <page>string</page> error - The error message.</arg> <arg name="headers" type="table" default="{}">KeyValue table for headers.</arg> </args> </function> <example> <description>Shows the typical usage to get the HTML of a webpage.</description> <code> local theReturnedHTML = "" -- Blankness http.Fetch( "https://www.google.com", -- onSuccess function function( body, length, headers, code ) -- The first argument is the HTML we asked for. theReturnedHTML = body end, -- onFailure function function( message ) -- We failed. =( print( message ) end, -- header example { ["accept-encoding"] = "gzip, deflate", ["accept-language"] = "fr" } ) </code> <output>If it successfully fetched the page, the variable `theReturnedHTML` should contain the returned HTML in plain text.</output> </example>