是否可以通过 Python 中的 POST 提交 Freebase mqlread 请求?我试图搜索文档,但一切都指的是 GET。谢谢。
问问题
185 次
2 回答
3
有可能的。
您将需要发出 aPOST
并添加一个特定的标头:(X-HTTP-Method-Override: GET
基本上是告诉服务器模拟 aGET
的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
于 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 回答