bqn-curl/curl.bqn

106 lines
3.2 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"
PrepareRequest{session 𝕊 urlheaders:
idRandID 32
filename"/tmp/bqncurl."id
filePtrFopenfilename@,"w+"
headerFilename"/tmp/bqncurl.header."id
headerFilePtrFopenheaderFilename@,"w+"
ruseragentEasySetoptStrsession,curlOptions.useragent,"curl/bqn"@
("Error setting user agent: "•Fmt ruseragent)!ruseragent=0
rurlEasySetoptStrsession,curlOptions.url,url@
("Error setting URL: "•Fmt rurl)!rurl=0
rfileEasySetoptPtrsession,curlOptions.writedata,filePtr
("Error setting file target: "•Fmt rfile)!rfile=0
rheaderfileEasySetoptPtrsession,curlOptions.headerdata,headerFilePtr
("Error setting header file target: "•Fmt rheaderfile)!rheaderfile=0
rredirectEasySetoptLongsession,curlOptions.followlocation,1
("Error setting redirect option: "•Fmt rredirect)!rredirect=0
# EasySetoptLong⟨session,curlOptions.header,1⟩
# EasySetoptLong⟨session,curlOptions.verbose,1⟩
slist(80){SlistAppend𝕩,𝕨@}´headers
rheadersEasySetoptPtrsession,curlOptions.httpHeader,slist
("Error setting headers: "•Fmt rheaders)!rheaders=0
slistfilenamefilePtrheaderFilenameheaderFilePtr
}
ReadResponse{session 𝕊 slistfilenamefilePtrheaderFilenameheaderFilePtr:
SlistFreeAll slist
rcodecodeEasyGetinfoLongsession,curlInfo.responseCode,0
("Error retrieving response code: "•Fmt rcode)!rcode=0
rtimetimeEasyGetinfoDoublesession,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
{
codecode,
timetime,
headersresponseHeaders,
contentcontent,
}
}
Get{
𝕊 url: 𝕊 url ;
headers 𝕊 url:
sessionEasyInit
dsession PrepareRequest urlheaders
rperformEasyPerformsession
("Error performing request: "•Fmt rperform)!rperform=0
responsesession ReadResponse d
EasyCleanup session
response
}
Post{
𝕊 urldata: 𝕊 urldata ;
headers 𝕊 urldata:
sessionEasyInit
dsession PrepareRequest urlheaders
rpostEasySetoptLongsession,curlOptions.post,1
("Error setting up POST request: "•Fmt rpost)!rpost=0
rpostfieldsEasySetoptStrsession,curlOptions.postfields,data
("Error setting POST data: "•Fmt rpostfields)!rpostfields=0
rpostfieldsizeEasySetoptLongsession,curlOptions.postfieldsize,data
("Error setting POST data size: "•Fmt rpostfieldsize)!rpostfieldsize=0
rperformEasyPerformsession
("Error performing request: "•Fmt rperform)!rperform=0
responsesession ReadResponse d
EasyCleanup session
response
}