Http To Https - Talk to https only APIs

Posted on
  • While creating a subscriber display for my girlfriends YouTube channel with my original Espruino I ran into an issue where the Google YouTube Data API only accepts connections over Https. The original Espruino, and ESP8266 builds, don't support https like the Pico so I created to bridge the Espruino to the Https only service.

    Check out for how to use it, I tried to make the homepage look nice. You can use the service however you'd like but I can't promise any up-time or reliability guarantees and I ask that you don't use it for commercial purposes.

    Example (This is on an ESP as an Espruino)::

    var http = require("http");
    http.get("­/", function(res) {
      var contents = "";
      res.on('data', function(data) { contents += data; });
      res.on('close', function() { console.log("MrTimcakes is from: " + JSON.parse(contents)["location"]); });

    prints "MrTimcakes is from: Great Britain"

    I will gladly take, and even ask for, suggestions to improve the service like Headers n' stuff.
    I will shortly make this open-source too.

  • Wow, that's awesome. Thanks!

    It's quite fun to provide an insecure way to access secure-only things :)

    If only you could register you could have­cakes

  • @Ducky like to use this to access

    Fencer is working with data in header and returns json.

    so like to try the bridge with curl to find if a position is in a fence like this:

    curl \
    -H "Authorization: {API Key} " \
    -H "Lat-Pos: {Latitude coordinate} " \
    -H "Lng-Pos: {Longitude coordinate}" \­{access key}

    Can the bridge handle something like this ?

    Next step is to use js on espruino ;-)

  • Yeah that works no problem, after I added custom header support ;)

    I̶t̶ ̶s̶h̶o̶u̶l̶d̶ ̶w̶o̶r̶k̶ ̶w̶i̶t̶h̶ ̶h̶t̶t̶p̶.̶r̶e̶q̶u̶e̶s̶t̶ ̶b̶u̶t̶ ̶I̶ ̶c̶a̶n̶'̶t̶ ̶g̶e̶t̶ ̶a̶n̶y̶ ̶f̶o̶r̶m̶ ̶o̶f̶ ̶t̶h̶a̶t̶ ̶t̶o̶ ̶w̶o̶r̶k̶,̶ ̶e̶v̶e̶n̶ ̶i̶f̶ ̶t̶h̶e̶r̶e̶ ̶i̶s̶n̶'̶t̶ ̶a̶n̶y̶ ̶c̶u̶s̶t̶o̶m̶ ̶h̶e̶a̶d̶e̶r̶s̶.̶

    And ready for Espruino here you go:

    var options = {
      host: '',
      path: '/',
      method: 'GET',
      headers: { "Authorization" : "YOUR-KEY-HERE" }
    require("http").get(options, function(res) {
      var contents="";
      res.on('data', function(data) {
      res.on('close', function(data) {
        console.log("Connection closed");

    Something strange happens if I try add data to contents though, it just returns false, that's why I thought I couldn't get it to work.

  • Thanks - that was quick ;-)

    This is what a verbose curl call gets when adding valid header data:

    < HTTP/1.1 200 OK
    < Date: Sun, 04 Sep 2016 04:00:02 GMT
    < Server: Apache/2.4.18 (Ubuntu)
    < Content-Length: 123
    < Vary: Accept-Encoding
    < Content-Type: text/html; charset=UTF-8
    * Connection #0 to host left intact
    "data": {
  • ok - took the sample code, added keys and headers - works fine - thanks again.

  • Hi @Ducky

    this link points to a sample Espruino module named FencerIO.js to call using your bridge

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview

Http To Https - Talk to https only APIs

Posted by Avatar for MrTimcakes @MrTimcakes