PUT请求在Fantom中根本没有发生

时间:2014-12-06 02:21:22

标签: rest google-sheets fantom

我在使用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?

1 个答案:

答案 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