HTTP and HTTPS example application for Mbed OS 5

Dependencies:   mbed-http

This application demonstrates how to make HTTP and HTTPS requests and parse the response from Mbed OS 5.

It consists of six example applications, which you can select in source/select-demo.h:

Response parsing is done through nodejs/http-parser.

Note: HTTPS requests do not work on targets with less than 128K of RAM due to the size of the TLS handshake. For more background see mbed-http.

To build

  1. If you're using WiFi, specify the credentials in mbed_app.json.
  2. Build the project in the online compiler or using Mbed CLI.
  3. Flash the project to your development board.
  4. Attach a serial monitor to your board to see the debug messages.

Defining the network interface

This application uses the on-board network interface for your board. If you use an external network interface (f.e. a WiFi module) you need to add the driver to this project. Then, open network-helper.h and specify which network driver to use.

More information is in the Mbed OS documentation under IP Networking.

Entropy (or lack thereof)

On all platforms that do not have the TRNG feature, the application is compiled without TLS entropy sources. This means that your code is inherently unsafe and should not be deployed to any production systems. To enable entropy, remove the MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY macros from mbed_app.json.

Flash size

Default flash size for HTTPS is very large, as the application is loading the default Mbed TLS configuration. To use a more optimized version, you can disable unused cypher suites and other Mbed TLS features with a custom configuration file. Create a new configuration file, then add in mbed_app.json:

"MBEDTLS_CONFIG_FILE=\"mbedtls_config.h\""

to the macros array.

Running tests

You can run the integration tests from this project via Mbed CLI.

  1. In select-demo.h set the DEMO macro to DEMO_TESTS.
  2. Set your WiFi credentials in mbed_app.json.
  3. Then run the tests via:

$ mbed test -v -n mbed-http-tests-tests-*

Tested on

  • K64F with Ethernet.
  • NUCLEO_F411RE with ESP8266 (not working on Mbed OS 5.12+)
  • ODIN-W2 with WiFi.
  • K64F with Atmel 6LoWPAN shield.
  • DISCO-L475VG-IOT01A with WiFi (requires the wifi-ism43362 driver).
Committer:
Jan Jongboom
Date:
Tue Mar 28 14:53:07 2017 +0200
Revision:
12:4c226ca06191
Parent:
0:85fdc69bc10c
Add socket reuse demo's

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jan Jongboom 0:85fdc69bc10c 1 Apache License
Jan Jongboom 0:85fdc69bc10c 2 Version 2.0, January 2004
Jan Jongboom 0:85fdc69bc10c 3 http://www.apache.org/licenses/
Jan Jongboom 0:85fdc69bc10c 4
Jan Jongboom 0:85fdc69bc10c 5 TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
Jan Jongboom 0:85fdc69bc10c 6
Jan Jongboom 0:85fdc69bc10c 7 1. Definitions.
Jan Jongboom 0:85fdc69bc10c 8
Jan Jongboom 0:85fdc69bc10c 9 "License" shall mean the terms and conditions for use, reproduction, and
Jan Jongboom 0:85fdc69bc10c 10 distribution as defined by Sections 1 through 9 of this document.
Jan Jongboom 0:85fdc69bc10c 11
Jan Jongboom 0:85fdc69bc10c 12 "Licensor" shall mean the copyright owner or entity authorized by the copyright
Jan Jongboom 0:85fdc69bc10c 13 owner that is granting the License.
Jan Jongboom 0:85fdc69bc10c 14
Jan Jongboom 0:85fdc69bc10c 15 "Legal Entity" shall mean the union of the acting entity and all other entities
Jan Jongboom 0:85fdc69bc10c 16 that control, are controlled by, or are under common control with that entity.
Jan Jongboom 0:85fdc69bc10c 17 For the purposes of this definition, "control" means (i) the power, direct or
Jan Jongboom 0:85fdc69bc10c 18 indirect, to cause the direction or management of such entity, whether by
Jan Jongboom 0:85fdc69bc10c 19 contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
Jan Jongboom 0:85fdc69bc10c 20 outstanding shares, or (iii) beneficial ownership of such entity.
Jan Jongboom 0:85fdc69bc10c 21
Jan Jongboom 0:85fdc69bc10c 22 "You" (or "Your") shall mean an individual or Legal Entity exercising
Jan Jongboom 0:85fdc69bc10c 23 permissions granted by this License.
Jan Jongboom 0:85fdc69bc10c 24
Jan Jongboom 0:85fdc69bc10c 25 "Source" form shall mean the preferred form for making modifications, including
Jan Jongboom 0:85fdc69bc10c 26 but not limited to software source code, documentation source, and configuration
Jan Jongboom 0:85fdc69bc10c 27 files.
Jan Jongboom 0:85fdc69bc10c 28
Jan Jongboom 0:85fdc69bc10c 29 "Object" form shall mean any form resulting from mechanical transformation or
Jan Jongboom 0:85fdc69bc10c 30 translation of a Source form, including but not limited to compiled object code,
Jan Jongboom 0:85fdc69bc10c 31 generated documentation, and conversions to other media types.
Jan Jongboom 0:85fdc69bc10c 32
Jan Jongboom 0:85fdc69bc10c 33 "Work" shall mean the work of authorship, whether in Source or Object form, made
Jan Jongboom 0:85fdc69bc10c 34 available under the License, as indicated by a copyright notice that is included
Jan Jongboom 0:85fdc69bc10c 35 in or attached to the work (an example is provided in the Appendix below).
Jan Jongboom 0:85fdc69bc10c 36
Jan Jongboom 0:85fdc69bc10c 37 "Derivative Works" shall mean any work, whether in Source or Object form, that
Jan Jongboom 0:85fdc69bc10c 38 is based on (or derived from) the Work and for which the editorial revisions,
Jan Jongboom 0:85fdc69bc10c 39 annotations, elaborations, or other modifications represent, as a whole, an
Jan Jongboom 0:85fdc69bc10c 40 original work of authorship. For the purposes of this License, Derivative Works
Jan Jongboom 0:85fdc69bc10c 41 shall not include works that remain separable from, or merely link (or bind by
Jan Jongboom 0:85fdc69bc10c 42 name) to the interfaces of, the Work and Derivative Works thereof.
Jan Jongboom 0:85fdc69bc10c 43
Jan Jongboom 0:85fdc69bc10c 44 "Contribution" shall mean any work of authorship, including the original version
Jan Jongboom 0:85fdc69bc10c 45 of the Work and any modifications or additions to that Work or Derivative Works
Jan Jongboom 0:85fdc69bc10c 46 thereof, that is intentionally submitted to Licensor for inclusion in the Work
Jan Jongboom 0:85fdc69bc10c 47 by the copyright owner or by an individual or Legal Entity authorized to submit
Jan Jongboom 0:85fdc69bc10c 48 on behalf of the copyright owner. For the purposes of this definition,
Jan Jongboom 0:85fdc69bc10c 49 "submitted" means any form of electronic, verbal, or written communication sent
Jan Jongboom 0:85fdc69bc10c 50 to the Licensor or its representatives, including but not limited to
Jan Jongboom 0:85fdc69bc10c 51 communication on electronic mailing lists, source code control systems, and
Jan Jongboom 0:85fdc69bc10c 52 issue tracking systems that are managed by, or on behalf of, the Licensor for
Jan Jongboom 0:85fdc69bc10c 53 the purpose of discussing and improving the Work, but excluding communication
Jan Jongboom 0:85fdc69bc10c 54 that is conspicuously marked or otherwise designated in writing by the copyright
Jan Jongboom 0:85fdc69bc10c 55 owner as "Not a Contribution."
Jan Jongboom 0:85fdc69bc10c 56
Jan Jongboom 0:85fdc69bc10c 57 "Contributor" shall mean Licensor and any individual or Legal Entity on behalf
Jan Jongboom 0:85fdc69bc10c 58 of whom a Contribution has been received by Licensor and subsequently
Jan Jongboom 0:85fdc69bc10c 59 incorporated within the Work.
Jan Jongboom 0:85fdc69bc10c 60
Jan Jongboom 0:85fdc69bc10c 61 2. Grant of Copyright License.
Jan Jongboom 0:85fdc69bc10c 62
Jan Jongboom 0:85fdc69bc10c 63 Subject to the terms and conditions of this License, each Contributor hereby
Jan Jongboom 0:85fdc69bc10c 64 grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
Jan Jongboom 0:85fdc69bc10c 65 irrevocable copyright license to reproduce, prepare Derivative Works of,
Jan Jongboom 0:85fdc69bc10c 66 publicly display, publicly perform, sublicense, and distribute the Work and such
Jan Jongboom 0:85fdc69bc10c 67 Derivative Works in Source or Object form.
Jan Jongboom 0:85fdc69bc10c 68
Jan Jongboom 0:85fdc69bc10c 69 3. Grant of Patent License.
Jan Jongboom 0:85fdc69bc10c 70
Jan Jongboom 0:85fdc69bc10c 71 Subject to the terms and conditions of this License, each Contributor hereby
Jan Jongboom 0:85fdc69bc10c 72 grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
Jan Jongboom 0:85fdc69bc10c 73 irrevocable (except as stated in this section) patent license to make, have
Jan Jongboom 0:85fdc69bc10c 74 made, use, offer to sell, sell, import, and otherwise transfer the Work, where
Jan Jongboom 0:85fdc69bc10c 75 such license applies only to those patent claims licensable by such Contributor
Jan Jongboom 0:85fdc69bc10c 76 that are necessarily infringed by their Contribution(s) alone or by combination
Jan Jongboom 0:85fdc69bc10c 77 of their Contribution(s) with the Work to which such Contribution(s) was
Jan Jongboom 0:85fdc69bc10c 78 submitted. If You institute patent litigation against any entity (including a
Jan Jongboom 0:85fdc69bc10c 79 cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Jan Jongboom 0:85fdc69bc10c 80 Contribution incorporated within the Work constitutes direct or contributory
Jan Jongboom 0:85fdc69bc10c 81 patent infringement, then any patent licenses granted to You under this License
Jan Jongboom 0:85fdc69bc10c 82 for that Work shall terminate as of the date such litigation is filed.
Jan Jongboom 0:85fdc69bc10c 83
Jan Jongboom 0:85fdc69bc10c 84 4. Redistribution.
Jan Jongboom 0:85fdc69bc10c 85
Jan Jongboom 0:85fdc69bc10c 86 You may reproduce and distribute copies of the Work or Derivative Works thereof
Jan Jongboom 0:85fdc69bc10c 87 in any medium, with or without modifications, and in Source or Object form,
Jan Jongboom 0:85fdc69bc10c 88 provided that You meet the following conditions:
Jan Jongboom 0:85fdc69bc10c 89
Jan Jongboom 0:85fdc69bc10c 90 You must give any other recipients of the Work or Derivative Works a copy of
Jan Jongboom 0:85fdc69bc10c 91 this License; and
Jan Jongboom 0:85fdc69bc10c 92 You must cause any modified files to carry prominent notices stating that You
Jan Jongboom 0:85fdc69bc10c 93 changed the files; and
Jan Jongboom 0:85fdc69bc10c 94 You must retain, in the Source form of any Derivative Works that You distribute,
Jan Jongboom 0:85fdc69bc10c 95 all copyright, patent, trademark, and attribution notices from the Source form
Jan Jongboom 0:85fdc69bc10c 96 of the Work, excluding those notices that do not pertain to any part of the
Jan Jongboom 0:85fdc69bc10c 97 Derivative Works; and
Jan Jongboom 0:85fdc69bc10c 98 If the Work includes a "NOTICE" text file as part of its distribution, then any
Jan Jongboom 0:85fdc69bc10c 99 Derivative Works that You distribute must include a readable copy of the
Jan Jongboom 0:85fdc69bc10c 100 attribution notices contained within such NOTICE file, excluding those notices
Jan Jongboom 0:85fdc69bc10c 101 that do not pertain to any part of the Derivative Works, in at least one of the
Jan Jongboom 0:85fdc69bc10c 102 following places: within a NOTICE text file distributed as part of the
Jan Jongboom 0:85fdc69bc10c 103 Derivative Works; within the Source form or documentation, if provided along
Jan Jongboom 0:85fdc69bc10c 104 with the Derivative Works; or, within a display generated by the Derivative
Jan Jongboom 0:85fdc69bc10c 105 Works, if and wherever such third-party notices normally appear. The contents of
Jan Jongboom 0:85fdc69bc10c 106 the NOTICE file are for informational purposes only and do not modify the
Jan Jongboom 0:85fdc69bc10c 107 License. You may add Your own attribution notices within Derivative Works that
Jan Jongboom 0:85fdc69bc10c 108 You distribute, alongside or as an addendum to the NOTICE text from the Work,
Jan Jongboom 0:85fdc69bc10c 109 provided that such additional attribution notices cannot be construed as
Jan Jongboom 0:85fdc69bc10c 110 modifying the License.
Jan Jongboom 0:85fdc69bc10c 111 You may add Your own copyright statement to Your modifications and may provide
Jan Jongboom 0:85fdc69bc10c 112 additional or different license terms and conditions for use, reproduction, or
Jan Jongboom 0:85fdc69bc10c 113 distribution of Your modifications, or for any such Derivative Works as a whole,
Jan Jongboom 0:85fdc69bc10c 114 provided Your use, reproduction, and distribution of the Work otherwise complies
Jan Jongboom 0:85fdc69bc10c 115 with the conditions stated in this License.
Jan Jongboom 0:85fdc69bc10c 116
Jan Jongboom 0:85fdc69bc10c 117 5. Submission of Contributions.
Jan Jongboom 0:85fdc69bc10c 118
Jan Jongboom 0:85fdc69bc10c 119 Unless You explicitly state otherwise, any Contribution intentionally submitted
Jan Jongboom 0:85fdc69bc10c 120 for inclusion in the Work by You to the Licensor shall be under the terms and
Jan Jongboom 0:85fdc69bc10c 121 conditions of this License, without any additional terms or conditions.
Jan Jongboom 0:85fdc69bc10c 122 Notwithstanding the above, nothing herein shall supersede or modify the terms of
Jan Jongboom 0:85fdc69bc10c 123 any separate license agreement you may have executed with Licensor regarding
Jan Jongboom 0:85fdc69bc10c 124 such Contributions.
Jan Jongboom 0:85fdc69bc10c 125
Jan Jongboom 0:85fdc69bc10c 126 6. Trademarks.
Jan Jongboom 0:85fdc69bc10c 127
Jan Jongboom 0:85fdc69bc10c 128 This License does not grant permission to use the trade names, trademarks,
Jan Jongboom 0:85fdc69bc10c 129 service marks, or product names of the Licensor, except as required for
Jan Jongboom 0:85fdc69bc10c 130 reasonable and customary use in describing the origin of the Work and
Jan Jongboom 0:85fdc69bc10c 131 reproducing the content of the NOTICE file.
Jan Jongboom 0:85fdc69bc10c 132
Jan Jongboom 0:85fdc69bc10c 133 7. Disclaimer of Warranty.
Jan Jongboom 0:85fdc69bc10c 134
Jan Jongboom 0:85fdc69bc10c 135 Unless required by applicable law or agreed to in writing, Licensor provides the
Jan Jongboom 0:85fdc69bc10c 136 Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
Jan Jongboom 0:85fdc69bc10c 137 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
Jan Jongboom 0:85fdc69bc10c 138 including, without limitation, any warranties or conditions of TITLE,
Jan Jongboom 0:85fdc69bc10c 139 NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
Jan Jongboom 0:85fdc69bc10c 140 solely responsible for determining the appropriateness of using or
Jan Jongboom 0:85fdc69bc10c 141 redistributing the Work and assume any risks associated with Your exercise of
Jan Jongboom 0:85fdc69bc10c 142 permissions under this License.
Jan Jongboom 0:85fdc69bc10c 143
Jan Jongboom 0:85fdc69bc10c 144 8. Limitation of Liability.
Jan Jongboom 0:85fdc69bc10c 145
Jan Jongboom 0:85fdc69bc10c 146 In no event and under no legal theory, whether in tort (including negligence),
Jan Jongboom 0:85fdc69bc10c 147 contract, or otherwise, unless required by applicable law (such as deliberate
Jan Jongboom 0:85fdc69bc10c 148 and grossly negligent acts) or agreed to in writing, shall any Contributor be
Jan Jongboom 0:85fdc69bc10c 149 liable to You for damages, including any direct, indirect, special, incidental,
Jan Jongboom 0:85fdc69bc10c 150 or consequential damages of any character arising as a result of this License or
Jan Jongboom 0:85fdc69bc10c 151 out of the use or inability to use the Work (including but not limited to
Jan Jongboom 0:85fdc69bc10c 152 damages for loss of goodwill, work stoppage, computer failure or malfunction, or
Jan Jongboom 0:85fdc69bc10c 153 any and all other commercial damages or losses), even if such Contributor has
Jan Jongboom 0:85fdc69bc10c 154 been advised of the possibility of such damages.
Jan Jongboom 0:85fdc69bc10c 155
Jan Jongboom 0:85fdc69bc10c 156 9. Accepting Warranty or Additional Liability.
Jan Jongboom 0:85fdc69bc10c 157
Jan Jongboom 0:85fdc69bc10c 158 While redistributing the Work or Derivative Works thereof, You may choose to
Jan Jongboom 0:85fdc69bc10c 159 offer, and charge a fee for, acceptance of support, warranty, indemnity, or
Jan Jongboom 0:85fdc69bc10c 160 other liability obligations and/or rights consistent with this License. However,
Jan Jongboom 0:85fdc69bc10c 161 in accepting such obligations, You may act only on Your own behalf and on Your
Jan Jongboom 0:85fdc69bc10c 162 sole responsibility, not on behalf of any other Contributor, and only if You
Jan Jongboom 0:85fdc69bc10c 163 agree to indemnify, defend, and hold each Contributor harmless for any liability
Jan Jongboom 0:85fdc69bc10c 164 incurred by, or claims asserted against, such Contributor by reason of your
Jan Jongboom 0:85fdc69bc10c 165 accepting any such warranty or additional liability.
Jan Jongboom 0:85fdc69bc10c 166
Jan Jongboom 0:85fdc69bc10c 167 ---
Jan Jongboom 0:85fdc69bc10c 168
Jan Jongboom 0:85fdc69bc10c 169 http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright
Jan Jongboom 0:85fdc69bc10c 170 Igor Sysoev.
Jan Jongboom 0:85fdc69bc10c 171
Jan Jongboom 0:85fdc69bc10c 172 Additional changes are licensed under the same terms as NGINX and
Jan Jongboom 0:85fdc69bc10c 173 copyright Joyent, Inc. and other Node contributors. All rights reserved.
Jan Jongboom 0:85fdc69bc10c 174
Jan Jongboom 0:85fdc69bc10c 175 Permission is hereby granted, free of charge, to any person obtaining a copy
Jan Jongboom 0:85fdc69bc10c 176 of this software and associated documentation files (the "Software"), to
Jan Jongboom 0:85fdc69bc10c 177 deal in the Software without restriction, including without limitation the
Jan Jongboom 0:85fdc69bc10c 178 rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
Jan Jongboom 0:85fdc69bc10c 179 sell copies of the Software, and to permit persons to whom the Software is
Jan Jongboom 0:85fdc69bc10c 180 furnished to do so, subject to the following conditions:
Jan Jongboom 0:85fdc69bc10c 181
Jan Jongboom 0:85fdc69bc10c 182 The above copyright notice and this permission notice shall be included in
Jan Jongboom 0:85fdc69bc10c 183 all copies or substantial portions of the Software.
Jan Jongboom 0:85fdc69bc10c 184
Jan Jongboom 0:85fdc69bc10c 185 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jan Jongboom 0:85fdc69bc10c 186 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jan Jongboom 0:85fdc69bc10c 187 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Jan Jongboom 0:85fdc69bc10c 188 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Jan Jongboom 0:85fdc69bc10c 189 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Jan Jongboom 0:85fdc69bc10c 190 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
Jan Jongboom 0:85fdc69bc10c 191 IN THE SOFTWARE.