我在使用google sheet api的PUT请求时遇到了一些麻烦。 我有这个代码
spreadsheet_inputer := WebClient(`$google_sheet_URI_cells/R3C6?access_token=$accesstoken`)
xml_test := XDoc{
XElem("entry")
{
addAttr("xmlns","http://www.w3.org/2005/Atom")
addAttr("xmlns:gs","http://schemas.google.com/spreadsheets/2006")
XElem("id") { XText("https://spreadsheets.google.com/feeds/cells/$spreadsheet_id/1/private/full/R3C6?access_token=$accesstoken"), },
XElem("link") { addAttr("rel","edit");addAttr("type","application/atom+xml");addAttr("href","https://spreadsheets.google.com/feeds/cells/$spreadsheet_id/1/private/full/R3C6?access_token=$accesstoken"); },
XElem("gs:cell") { addAttr("row","3");addAttr("col","6");addAttr("inputValue","testing 123"); },
},
}
spreadsheet_inputer.reqHeaders["If-match"] = "*"
spreadsheet_inputer.reqHeaders["Content-Type"] = "application/atom+xml"
spreadsheet_inputer.reqMethod = "PUT"
spreadsheet_inputer.writeReq
spreadsheet_inputer.reqOut.writeXml(xml_test.writeToStr).close
echo(spreadsheet_inputer.resStr)
现在它返回
sys::IOErr: No input stream for response 0
在echo语句中。
我拥有所有必要的数据(至少我很确定)并且它可以在这里工作https://developers.google.com/oauthplayground/
请注意,它无法准确更新日历。
编辑:我让它返回响应代码,它是一个0,任何关于这意味着什么从谷歌表api?还是幻想webclient?答案 0 :(得分:1)
WebClient.resCode
是一个不可为空的Int
,因此默认为0,因此问题可能是请求未被发送或响应未被读取。
由于你显然在写这个请求,问题应该是后者。请尝试在resStr
之前致电WebClient.readRes()。
这个readRes()
阅读响应状态行和响应标头。在通过writeReq和reqOut写入请求后,可以调用此方法。此方法完成后,响应状态和标头可用。如果有响应主体,则可通过resIn读取。如果存在网络或协议错误,请抛出IOErr。归还这个。
试试这个:
echo(spreadsheet_inputer.readRes.resStr)
我怀疑以下行也会导致问题:
spreadsheet_inputer.reqOut.writeXml(xml_test.writeToStr).close
因为writeXml()
将字符串转义为XML安全,而您只想打印字符串。试试这个:
spreadsheet_inputer.reqOut.writeChars(xml_test.writeToStr).close