Refactor GET and POST requests
This commit is contained in:
parent
4ff2099e99
commit
5b22260f28
2 changed files with 27 additions and 56 deletions
78
curl.bqn
78
curl.bqn
|
@ -19,17 +19,13 @@
|
||||||
⟩←•Import"ffi.bqn"
|
⟩←•Import"ffi.bqn"
|
||||||
⟨RandID⟩←•Import"utils.bqn"
|
⟨RandID⟩←•Import"utils.bqn"
|
||||||
|
|
||||||
Get←{
|
PrepareRequest←{session 𝕊 url‿headers:
|
||||||
𝕊 url: ⟨⟩ 𝕊 url ;
|
|
||||||
headers 𝕊 url:
|
|
||||||
id←RandID 32
|
id←RandID 32
|
||||||
filename←"/tmp/bqncurl."∾id
|
filename←"/tmp/bqncurl."∾id
|
||||||
filePtr←Fopen⟨filename∾@,"w+"⟩
|
filePtr←Fopen⟨filename∾@,"w+"⟩
|
||||||
headerFilename←"/tmp/bqncurl.header."∾id
|
headerFilename←"/tmp/bqncurl.header."∾id
|
||||||
headerFilePtr←Fopen⟨headerFilename∾@,"w+"⟩
|
headerFilePtr←Fopen⟨headerFilename∾@,"w+"⟩
|
||||||
|
|
||||||
session←EasyInit⟨⟩
|
|
||||||
|
|
||||||
ruseragent←EasySetoptStr⟨session,curlOptions.useragent,"curl/bqn"∾@⟩
|
ruseragent←EasySetoptStr⟨session,curlOptions.useragent,"curl/bqn"∾@⟩
|
||||||
("Error setting user agent: "∾•Fmt ruseragent)!ruseragent=0
|
("Error setting user agent: "∾•Fmt ruseragent)!ruseragent=0
|
||||||
rurl←EasySetoptStr⟨session,curlOptions.url,url∾@⟩
|
rurl←EasySetoptStr⟨session,curlOptions.url,url∾@⟩
|
||||||
|
@ -47,27 +43,26 @@ headers 𝕊 url:
|
||||||
rheaders←EasySetoptPtr⟨session,curlOptions.httpHeader,slist⟩
|
rheaders←EasySetoptPtr⟨session,curlOptions.httpHeader,slist⟩
|
||||||
("Error setting headers: "∾•Fmt rheaders)!rheaders=0
|
("Error setting headers: "∾•Fmt rheaders)!rheaders=0
|
||||||
|
|
||||||
rperform←EasyPerform⟨session⟩
|
slist‿filename‿filePtr‿headerFilename‿headerFilePtr
|
||||||
("Error performing request: "∾•Fmt rperform)!rperform=0
|
}
|
||||||
|
|
||||||
|
ReadResponse←{session 𝕊 slist‿filename‿filePtr‿headerFilename‿headerFilePtr:
|
||||||
SlistFreeAll slist
|
SlistFreeAll slist
|
||||||
|
|
||||||
rcode‿⟨code⟩←EasyGetinfoLong⟨session,curlInfo.responseCode,⟨0⟩⟩
|
rcode‿⟨code⟩←EasyGetinfoLong⟨session,curlInfo.responseCode,⟨0⟩⟩
|
||||||
("Error retrieving response code: "∾•Fmt rcode)!rcode=0
|
("Error retrieving response code: "∾•Fmt rcode)!rcode=0
|
||||||
# ("Request failed with status code "∾•Fmt code)!2=⌊code÷100
|
|
||||||
rtime‿⟨time⟩←EasyGetinfoDouble⟨session,curlInfo.totalTime,⟨0.0⟩⟩
|
rtime‿⟨time⟩←EasyGetinfoDouble⟨session,curlInfo.totalTime,⟨0.0⟩⟩
|
||||||
("Error retrieving request time: "∾•Fmt rtime)!rtime=0
|
("Error retrieving request time: "∾•Fmt rtime)!rtime=0
|
||||||
|
|
||||||
Fclose filePtr
|
Fclose filePtr
|
||||||
Fclose headerFilePtr
|
Fclose headerFilePtr
|
||||||
|
|
||||||
content←•file.Bytes filename
|
content←•file.Bytes filename
|
||||||
responseHeaders←•file.Chars headerFilename
|
responseHeaders←•file.Chars headerFilename
|
||||||
|
|
||||||
•file.Remove filename
|
•file.Remove filename
|
||||||
•file.Remove headerFilename
|
•file.Remove headerFilename
|
||||||
|
|
||||||
EasyCleanup session
|
|
||||||
|
|
||||||
{
|
{
|
||||||
code⇐code,
|
code⇐code,
|
||||||
time⇐time,
|
time⇐time,
|
||||||
|
@ -76,65 +71,36 @@ headers 𝕊 url:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Get←{
|
||||||
|
𝕊 url: ⟨⟩ 𝕊 url ;
|
||||||
|
headers 𝕊 url:
|
||||||
|
session←EasyInit⟨⟩
|
||||||
|
d←session PrepareRequest url‿headers
|
||||||
|
|
||||||
|
rperform←EasyPerform⟨session⟩
|
||||||
|
("Error performing request: "∾•Fmt rperform)!rperform=0
|
||||||
|
|
||||||
|
response←session ReadResponse d
|
||||||
|
EasyCleanup session
|
||||||
|
response
|
||||||
|
}
|
||||||
|
|
||||||
Post←{
|
Post←{
|
||||||
𝕊 url‿data: ⟨⟩ 𝕊 url‿data ;
|
𝕊 url‿data: ⟨⟩ 𝕊 url‿data ;
|
||||||
headers 𝕊 url‿data:
|
headers 𝕊 url‿data:
|
||||||
id←RandID 32
|
|
||||||
filename←"/tmp/bqncurl."∾id
|
|
||||||
filePtr←Fopen⟨filename∾@,"w+"⟩
|
|
||||||
headerFilename←"/tmp/bqncurl.header."∾id
|
|
||||||
headerFilePtr←Fopen⟨headerFilename∾@,"w+"⟩
|
|
||||||
|
|
||||||
session←EasyInit⟨⟩
|
session←EasyInit⟨⟩
|
||||||
|
d←session PrepareRequest url‿headers
|
||||||
ruseragent←EasySetoptStr⟨session,curlOptions.useragent,"curl/bqn"∾@⟩
|
|
||||||
("Error setting user agent: "∾•Fmt ruseragent)!ruseragent=0
|
|
||||||
rurl←EasySetoptStr⟨session,curlOptions.url,url∾@⟩
|
|
||||||
("Error setting URL: "∾•Fmt rurl)!rurl=0
|
|
||||||
rfile←EasySetoptPtr⟨session,curlOptions.writedata,filePtr⟩
|
|
||||||
("Error setting file target: "∾•Fmt rfile)!rfile=0
|
|
||||||
rheaderfile←EasySetoptPtr⟨session,curlOptions.headerdata,headerFilePtr⟩
|
|
||||||
("Error setting header file target: "∾•Fmt rheaderfile)!rheaderfile=0
|
|
||||||
rredirect←EasySetoptLong⟨session,curlOptions.followlocation,1⟩
|
|
||||||
("Error setting redirect option: "∾•Fmt rredirect)!rredirect=0
|
|
||||||
rpost←EasySetoptLong⟨session,curlOptions.post,1⟩
|
rpost←EasySetoptLong⟨session,curlOptions.post,1⟩
|
||||||
("Error setting up POST request: "∾•Fmt rpost)!rpost=0
|
("Error setting up POST request: "∾•Fmt rpost)!rpost=0
|
||||||
rpostfields←EasySetoptStr⟨session,curlOptions.postfields,data⟩
|
rpostfields←EasySetoptStr⟨session,curlOptions.postfields,data⟩
|
||||||
("Error setting POST data: "∾•Fmt rpostfields)!rpostfields=0
|
("Error setting POST data: "∾•Fmt rpostfields)!rpostfields=0
|
||||||
rpostfieldsize←EasySetoptLong⟨session,curlOptions.postfieldsize,≠data⟩
|
rpostfieldsize←EasySetoptLong⟨session,curlOptions.postfieldsize,≠data⟩
|
||||||
("Error setting POST data size: "∾•Fmt rpostfieldsize)!rpostfieldsize=0
|
("Error setting POST data size: "∾•Fmt rpostfieldsize)!rpostfieldsize=0
|
||||||
# EasySetoptLong⟨session,curlOptions.header,1⟩
|
|
||||||
# EasySetoptLong⟨session,curlOptions.verbose,1⟩
|
|
||||||
|
|
||||||
slist←(8↑0){SlistAppend⟨𝕩,𝕨∾@⟩}´headers
|
|
||||||
rheaders←EasySetoptPtr⟨session,curlOptions.httpHeader,slist⟩
|
|
||||||
("Error setting headers: "∾•Fmt rheaders)!rheaders=0
|
|
||||||
|
|
||||||
rperform←EasyPerform⟨session⟩
|
rperform←EasyPerform⟨session⟩
|
||||||
("Error performing request: "∾•Fmt rperform)!rperform=0
|
("Error performing request: "∾•Fmt rperform)!rperform=0
|
||||||
|
|
||||||
SlistFreeAll slist
|
response←session ReadResponse d
|
||||||
|
|
||||||
rcode‿⟨code⟩←EasyGetinfoLong⟨session,curlInfo.responseCode,⟨0⟩⟩
|
|
||||||
("Error retrieving response code: "∾•Fmt rcode)!rcode=0
|
|
||||||
# ("Request failed with status code "∾•Fmt code)!2=⌊code÷100
|
|
||||||
rtime‿⟨time⟩←EasyGetinfoDouble⟨session,curlInfo.totalTime,⟨0.0⟩⟩
|
|
||||||
("Error retrieving request time: "∾•Fmt rtime)!rtime=0
|
|
||||||
|
|
||||||
Fclose filePtr
|
|
||||||
Fclose headerFilePtr
|
|
||||||
content←•file.Bytes filename
|
|
||||||
responseHeaders←•file.Chars headerFilename
|
|
||||||
|
|
||||||
•file.Remove filename
|
|
||||||
•file.Remove headerFilename
|
|
||||||
|
|
||||||
EasyCleanup session
|
EasyCleanup session
|
||||||
|
response
|
||||||
{
|
|
||||||
code⇐code,
|
|
||||||
time⇐time,
|
|
||||||
headers⇐responseHeaders,
|
|
||||||
content⇐content,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
5
test.bqn
5
test.bqn
|
@ -1,5 +1,10 @@
|
||||||
⟨Get,Post⟩←•Import"curl.bqn"
|
⟨Get,Post⟩←•Import"curl.bqn"
|
||||||
|
|
||||||
|
r←Get"http://localhost:8080/get"
|
||||||
|
r.code
|
||||||
|
r.headers
|
||||||
|
r.content
|
||||||
|
|
||||||
r←⟨"Content-Type: application/json"⟩Post"http://localhost:8080/post"‿"{""key"": ""value""}"
|
r←⟨"Content-Type: application/json"⟩Post"http://localhost:8080/post"‿"{""key"": ""value""}"
|
||||||
r.code
|
r.code
|
||||||
r.headers
|
r.headers
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue