bqn-curl/curl.bqn

98 lines
2.7 KiB
BQN
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Get,Post
easyInit,
easyCleanup,
easySetoptStr,
easySetoptPtr,
easySetoptLong,
easyPerform,
easyGetinfoStr,
easyGetinfoLong,
easyGetinfoDouble,
slistAppend,
slistFreeAll,
fopen,
fclose,
curlOptions,
curlInfo
•Import"ffi.bqn"
RandID•Import"utils.bqn"
Check{
msg"Curl: "𝕨" ("(•Fmt 𝕩)")"
msg ! 𝕩=0
}
PrepareRequest{session 𝕊 urlheaders:
idRandID 32
filename"/tmp/bqncurl."id
filePtrFopenfilename@,"w+"
headerFilename"/tmp/bqncurl.header."id
headerFilePtrFopenheaderFilename@,"w+"
"setting user agent"Check EasySetoptStrsession,curlOptions.useragent,"curl/bqn"@
"setting URL"Check EasySetoptStrsession,curlOptions.url,url@
"setting file target"Check EasySetoptPtrsession,curlOptions.writedata,filePtr
"setting header file target"Check EasySetoptPtrsession,curlOptions.headerdata,headerFilePtr
"setting redirect option"Check EasySetoptLongsession,curlOptions.followlocation,1
# "setting verbosity"Check EasySetoptLong⟨session,curlOptions.verbose,1⟩
slist(80){SlistAppend𝕩,𝕨@}´headers
"setting headers"Check rheadersEasySetoptPtrsession,curlOptions.httpHeader,slist
slistfilenamefilePtrheaderFilenameheaderFilePtr
}
ReadResponse{session 𝕊 slistfilenamefilePtrheaderFilenameheaderFilePtr:
SlistFreeAll slist
rcodecodeEasyGetinfoLongsession,curlInfo.responseCode,0
"retrieving response code"Check rcode
rtimetimeEasyGetinfoDoublesession,curlInfo.totalTime,0.0
"retrieving request time"Check rtime
Fclose filePtr
Fclose headerFilePtr
content•file.Bytes filename
responseHeaders•file.Chars headerFilename
•file.Remove filename
•file.Remove headerFilename
{
codecode,
timetime,
headersresponseHeaders,
contentcontent,
}
}
Get{
𝕊 url: 𝕊 url ;
headers 𝕊 url:
sessionEasyInit
dsession PrepareRequest urlheaders
"performing request"Check EasyPerformsession
responsesession ReadResponse d
EasyCleanup session
response
}
Post{
𝕊 urldata: 𝕊 urldata ;
headers 𝕊 urldata:
sessionEasyInit
dsession PrepareRequest urlheaders
"setting up POST request"Check EasySetoptLongsession,curlOptions.post,1
"setting POST data"Check EasySetoptStrsession,curlOptions.postfields,data
"setting POST data size"Check EasySetoptLongsession,curlOptions.postfieldsize,data
"performing request"Check EasyPerformsession
responsesession ReadResponse d
EasyCleanup session
response
}