Freebase Mqlread InvalidURLError:无效的请求URL - 太长 - POST可能吗?

时间:2013-09-19 22:27:50

标签: freebase

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

2 个答案:

答案 0 :(得分:3)

有可能。

您需要发出POST问题并添加特定标题:X-HTTP-Method-Override: GET(基本上告诉服务器模拟GET的内容POST。特别是对我来说,我使用了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

答案 1 :(得分:0)

我认为MQL不支持POST,但您可以使用HTTP Batch工具。

这是Python中的一个例子:

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