是否可以通过Python中的POST提交Freebase mqlread请求?我试图搜索文档,但一切都是指GET。感谢。
答案 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