2

是否可以通过 Python 中的 POST 提交 Freebase mqlread 请求?我试图搜索文档,但一切都指的是 GET。谢谢。

4

2 回答 2

3

有可能的。

您将需要发出 aPOST并添加一个特定的标头:(X-HTTP-Method-Override: GET基本上是告诉服务器模拟 aGETPOST内容)。特别是对我来说,我使用了Content-Encoding: application/x-www-form-urlencode.

如果有帮助,这是我的代码(coffeescript)的相关部分:

mqlread = (query, queryEnvelope, cb) ->

    ## build URL
    url = urlparser.format
        protocol: 'https'
        host: 'www.googleapis.com'
        pathname: 'freebase/v1/mqlread'

    ## build POST body
    queryEnvelope ?= {}
    queryEnvelope.key = config.GOOGLE_API_SERVER_KEY
    queryEnvelope.query = JSON.stringify query

    options =
        url: url
        method: 'POST'
        headers:
            'X-HTTP-Method-Override': 'GET'
            'User-Agent': config.wikipediaScraperUserAgent
        timeout: 3000
        form: queryEnvelope

    ## invoke API
    request options, (err, response, body) ->
        if err then return cb err
        if response.statusCode != 200
            try
                json = JSON.parse(body)
                errmsg = json?.error?.message or "(unknown JSON)"
            catch e
                errmsg = body?[..50]
            return cb "#{response.statusCode} #{errmsg}"
        r = JSON.parse response.body
        decodeStringsInResponse r
        cb null, r
于 2013-09-20T04:32:20.320 回答
0

我认为 MQLread 不支持 POST,但您可以使用 HTTP 批处理工具。

这是 Python 中的一个示例:

https://github.com/tfmorris/freebase-python-samples/blob/master/client-library/mqlread-batch.py

于 2013-09-19T23:45:09.163 回答