Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : PicoMite Web Client Session.
Author | Message | ||||
pwillard Senior Member Joined: 07/06/2022 Location: United StatesPosts: 292 |
It feels like it should work... WorldTimeAPI is a simple web service that returns the current local time for a given timezone as either plain text or JSON. curl "http://worldtimeapi.org/api/timezone/America/New_York" And my code is as close to the SAMPLE code as possible for "reasons". DIM buff%(512) DIM GetRequest$ = "GET /api/timezone/America/New_York"+Chr$(10)+Chr$(13) DIM ADDRESS$ = "worldtimeapi.org" '=====[ MAIN CODE ]============================================================= 'Do print "Open Session" WEB OPEN TCP CLIENT Address$,80 print "Make Request" WEB TCP CLIENT REQUEST GetRequest$, buff%(),10000 print "Close Session" WEB CLOSE TCP CLIENT ' Just dump out what I got back... LongString Print buff%() And what I get is: > run Open Session Connected Make request Close Session HTTP/1.1 400 Bad Request content-length: 0 date: Sat, 18 Mar 2023 23:33:10 GMT I'm kinda bummed as it seemed simple enough... |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 6102 |
DIM GetRequest$ = "GET /api/timezone/America/new_york HTTP/1.1"+Chr$(13)+Chr$(10)+Chr$(13)+Chr$(10) Case may be important. new_york all in lower case. You need the 'HTTP/1.1" at the end and you seems to need two crlf pairs. Jim Edit: Case is NOT important for the location. Edited 2023-03-19 11:38 by TassyJim VK7JH MMedit MMBasic Help |
||||
pwillard Senior Member Joined: 07/06/2022 Location: United StatesPosts: 292 |
Thanks I must be blind... it was right there. But its baby steps... I now GET the response... but annoyingly, it's not just JSON in the buffer, as I got all of the header information too so JSON$ will "barf" on it. (I mean, It does, as it's essentially not JSON data if it sees the header info too) What the Client session gets back in the BUFF%() from the server is: Make Request Close Session HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * access-control-expose-headers: cache-control: max-age=0, private, must-revalidate content-length: 398 content-type: application/json; charset=utf-8 cross-origin-window-policy: deny date: Sun, 19 Mar 2023 10:34:52 GMT server: Fly/00340618 (2023-03-12) x-content-type-options: nosniff x-download-options: noopen x-frame-options: SAMEORIGIN x-permitted-cross-domain-policies: none x-request-id: F03LmMh6G30W6Pos4tah x-runtime: 782�s x-xss-protection: 1; mode=block via: 1.1 fly.io fly-request-id: 01GVWPZDA8QTW11HZG5Q7AF5P6-atl {"abbreviation":"EDT","client_ip":"98.251.103.80","datetime":"2023-03-19T06:34:53} > Which clearly is not what I expect, what is documented... nor what my API testing tool showed me. So... <sigh>... there are still secrets to uncover. Edited 2023-03-19 20:41 by pwillard |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
LongString trim buff%(),LInStr(buff%(),"{")-1 Edited 2023-03-19 21:12 by matherp |
||||
pwillard Senior Member Joined: 07/06/2022 Location: United StatesPosts: 292 |
Ok well... That *does* trim out the header... (Which was where I was headed with this... so Thanks) It seems ODD that the header gets captured on the GET REQUEST made by MMBASIC, but not on a CURL or an "Advanced Rest Client" request. (or are we SUPPOSED to capture header data in the GET request?) I thought this would be a simple client API call example to add to my docs... but it quickly became troublesome. Anyway... JSON$ is happy now as the BUFF%() array now does only have JSON data in it. Sample Code: ' Program: TimeApi.bas ' Author: pete willard ' Version: 1.0 ' Target: PicoWeb ' Date: 2023/03/19 ' Time: 07:22:29 ' Reference: '=============================================================================== ' TTTTT III M M EEEEE AAA PPPP III BBBB AAA SSSS ' T I MM MM E A A P P I B B A A S ' T I M M M EEEE AAAAA PPPP I BBBB AAAAA SSS ' T I M M M E A A P I .. B B A A S ' T III M M EEEEE A A P III .. BBBB A A SSSS '=============================================================================== ' Notes: USING "Advanced Rest Client App" ' Get: ' "http://worldtimeapi.org/api/timezone/America/New_York" ' Receives: '{ '"abbreviation": "EDT", '"client_ip": "98.251.103.80", '"datetime": "2023-03-18T11:56:00.035491-04:00", '"day_of_week": 6, '"day_of_year": 77, '"dst": true, '"dst_from": "2023-03-12T07:00:00+00:00", '"dst_offset": 3600, '"dst_until": "2023-11-05T06:00:00+00:00", '"raw_offset": -18000, '"timezone": "America/New_York", '"unixtime": 1679154960, '"utc_datetime": "2023-03-18T15:56:00.035491+00:00", '"utc_offset": "-04:00", '"week_number": 11 '} ' For some reason, the API call wants 2 carriage returns on a GET request. '=====[ CONFIGURATION ]========================================================= 'OPTION SYSTEM SPI GP18, GP19, GP16 'OPTION SYSTEM I2C GP0, GP1 'OPTION SDCARD GP22 'OPTION DEFAULT INTEGER 'OPTION EXPLICIT '=====[ VARIABLES ]============================================================= DIM buff%(512) ' Response Buffer DIM CRLF$ = CHR$(10)+CHR$(13) DIM GetRequest$ = "GET /api/timezone/America/New_York HTTP/1.1"+CRLF$+CRLF$ DIM ADDRESS$ = "worldtimeapi.org" '=====[ SUBROUTINES ]=========================================================== '=============================================================================== '=====[ MAIN CODE ]============================================================= print "Open Session" WEB OPEN TCP CLIENT Address$,80 print "Make Request" WEB TCP CLIENT REQUEST GetRequest$, buff%(),10000 print "Close Session" WEB CLOSE TCP CLIENT ' Trim result LongString trim buff%(),LInStr(buff%(),"{")-1 'Print result 'longstring print buff%() print "Date and Time: ",Json$(buff%(),"datetime") Print "TimeZone : ",Json$(buff%(),"timezone") Print "UTC Offset : ",Json$(buff%(),"raw_offset") ' Note: RUN ONCE... this is an API so don't abuse it. '=============================================================================== Results: RUN Open Session Connected Make Request Close Session Date and Time: 2023-03-19T07:35:33.786172-04:00 TimeZone : America/New_York UTC Offset : -18000 woohoo! Edited 2023-03-19 21:44 by pwillard |
||||
Print this page |