1

我在向谷歌表格 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

在回声声明中。

我有所有必要的数据(至少我很确定),它在这里工作https://developers.google.com/oauthplayground/

请注意,它不会准确更新日历。

编辑:我让它返回响应代码,它是一个 0,关于这意味着什么的任何指针从谷歌表 api ?还是 fantom 网络客户端?

4

1 回答 1

1

WebClient.resCode是不可为空Int的,因此默认为 0,因此问题可能是未发送请求或未读取响应。

由于您显然正在编写请求,因此问题应该是后者。尝试在之前调用WebClient.readRes()resStr

这个 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
于 2014-12-06T10:39:00.357 回答