summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorSonny Piers <sonny@fastmail.net>2019-09-20 02:36:57 +0200
committerSonny Piers <sonny@fastmail.net>2019-09-20 02:41:42 +0200
commit3a2a604541880053986d988823e10197608b2df8 (patch)
tree79bbc82122ca000145d3bab0fda7905b8f9bdc83 /examples
parent8176280293478b42fc08b83b4d42713464dff78b (diff)
downloadgjs-3a2a604541880053986d988823e10197608b2df8.tar.gz
add http client example
Diffstat (limited to 'examples')
-rw-r--r--examples/http-client.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/http-client.js b/examples/http-client.js
new file mode 100644
index 00000000..d6f863eb
--- /dev/null
+++ b/examples/http-client.js
@@ -0,0 +1,53 @@
+// This is a simple example of a HTTP client in Gjs using libsoup
+// https://developer.gnome.org/libsoup/stable/libsoup-client-howto.html
+
+const Soup = imports.gi.Soup;
+const GLib = imports.gi.GLib;
+const byteArray = imports.byteArray;
+
+const loop = GLib.MainLoop.new(null, false);
+
+const session = new Soup.Session();
+const message = new Soup.Message({
+ method: 'GET',
+ uri: Soup.URI.new('http://localhost:1080/hello?myname=gjs'),
+});
+
+session.send_async(message, null, send_async_callback);
+
+function read_bytes_async_callback(inputStream, res) {
+ let data;
+
+ try {
+ data = inputStream.read_bytes_finish(res);
+ } catch (e) {
+ logError(e);
+ loop.quit();
+ return;
+ }
+
+ log(`body:\n${byteArray.toString(byteArray.fromGBytes(data))}`);
+
+ loop.quit();
+}
+
+function send_async_callback(self, res) {
+ let inputStream;
+
+ try {
+ inputStream = session.send_finish(res);
+ } catch (e) {
+ logError(e);
+ loop.quit();
+ return;
+ }
+
+ log(`status: ${message.status_code} - ${message.reason_phrase}`);
+ message.response_headers.foreach((name, value) => {
+ log(`${name}: ${value}`);
+ });
+
+ inputStream.read_bytes_async(message.response_headers.get('content-length'), null, null, read_bytes_async_callback);
+}
+
+loop.run();