This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
api:internet [2019/06/12 05:26] jacky_wang [Internet API] |
api:internet [2019/11/29 23:06] (current) jab [Internet API] |
||
---|---|---|---|
Line 3: | Line 3: | ||
This library wraps functionality of Internet cards. Also see the [[component:internet|Internet Component]] for more low level functionality (such as querying availability of HTTP and TCP functionality). | This library wraps functionality of Internet cards. Also see the [[component:internet|Internet Component]] for more low level functionality (such as querying availability of HTTP and TCP functionality). | ||
- | - `internet.request(url: string[, data: string or table[, headers: table]]): function` | + | - `internet.request(url: string[, data: string or table[, headers: table[, method: string]]]): function` |
- | Sends an HTTP request to the specified URL, with the specified POST data, if any. If no data is specified, a GET request will be made. The POST data can be in one of two formats: if it's a string, it will be sent as-is. If it's a table, it will be converted to a string by assuming that each key is the name of a POST variable, and it's associated value is the value for that variable. So, for example: | + | Sends an HTTP request to the specified URL, with the specified POST data, if any. If no data is specified, a GET request will be made. The POST data can be in one of two formats: if it's a string, it will be sent as-is. If it's a table, it will be converted to a string by assuming that each key is the name of a POST variable, and it's associated value is the value for that variable. **method** can be explicitly specified to values such as GET, POST, or PUT. Some examples: |
`internet.request(url, {some = "variable", another = 1})` | `internet.request(url, {some = "variable", another = 1})` | ||
Will send `some=variable&another=1`. | Will send `some=variable&another=1`. | ||
Line 11: | Line 11: | ||
Note that **this method ALSO support HTTPS**. So simply use | Note that **this method ALSO support HTTPS**. So simply use | ||
`internet.request("https://example.com")` to send a request through HTTPS. | `internet.request("https://example.com")` to send a request through HTTPS. | ||
+ | | ||
+ | Example specifying PUT: | ||
+ | `internet.request("https://example.com", "put data", {}, "PUT")`. | ||
- `internet.socket(address:string[, port:number]):table` | - `internet.socket(address:string[, port:number]):table` | ||
Line 27: | Line 30: | ||
handle:close() | handle:close() | ||
``` | ``` | ||
+ | If you need the HTTP response code, message, and headers, they are retrieved from the internal object, which is stored in the metatable of the returned object. | ||
+ | ```lua | ||
+ | -- https://github.com/kikito/inspect.lua/blob/master/inspect.lua | ||
+ | local inspect = require("inspect") | ||
+ | local internet = require("internet") | ||
+ | |||
+ | local handle = internet.request("https://www.google.com") | ||
+ | local result = "" | ||
+ | for chunk in handle do result = result..chunk end | ||
+ | -- Print the body of the HTTP response | ||
+ | -- print(result) | ||
+ | |||
+ | -- Grab the metatable for the handle. This contains the | ||
+ | -- internal HTTPRequest object. | ||
+ | local mt = getmetatable(handle) | ||
+ | |||
+ | -- The response method grabs the information for | ||
+ | -- the HTTP response code, the response message, and the | ||
+ | -- response headers. | ||
+ | local code, message, headers = mt.__index.response() | ||
+ | print("code = "..tostring(code)) | ||
+ | print("message = "..tostring(message)) | ||
+ | print(inspect(headers)) | ||
+ | ``` | ||
This is an example of a basic IRC bot that echos back what you say to it, using the sockets in the internet api. | This is an example of a basic IRC bot that echos back what you say to it, using the sockets in the internet api. | ||
Line 76: | Line 102: | ||
----------- | ----------- | ||
{{page>api:contents&noheader&noeditbutton&nouser&nofooter}} | {{page>api:contents&noheader&noeditbutton&nouser&nofooter}} | ||
+ |