Revision Difference
http.Fetch#546208
<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>Currently there is a problem with CURL library on Linux being unable to validate HTTPS connections with certificates issued by Let's Encrypt. The best course of action to solve this problem now is to use binary module that replaces HTTP function. Either this one https://github.com/WilliamVenner/gmsv_reqwest or this one https://github.com/timschumi/gmod-chttp.</bug>
<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` (serverside only).</note>
⤶
<bug issue="5065">Currently there is a problem with CURL library on Linux being unable to validate HTTPS connections with certificates issued by Let's Encrypt. The best course of action to solve this problem now is to use binary module that replaces HTTP function. Either this one https://github.com/WilliamVenner/gmsv_reqwest or this one https://github.com/timschumi/gmod-chttp.⤶
⤶
**This is fixed in the next update**.</bug>
⤶
<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` (serverside only).</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>