如何使用 python 3 构造对 neutrinoapi 的请求? (将 urllib2 请求转换为 urllib)

How to structure a request to neutrinoapi using python 3? (convert urllib2 request to urllib)

我是服务器端代码的新手,对使用 neutrinoapi (www.neutrinoapi.com) 从文本中过滤掉一些不良词很感兴趣。我在 Python 3 中编写了以下代码(我使用的是 Bottle 服务器):

url = 'https://neutrinoapi.com/bad-word-filter'
params = {
    'user-id': 'testing',
    'api-key': '205cmqorLBdyV2F9FX4z6NNq1Y3z8AkRTw8ImtGE2MtzxmhT',
    'ip': '162.209.104.195'
}

json_data = json.dumps(params).encode('utf8')
response = urllib.request.urlopen(url, data = json_data)
result = json.loads(response.read())

此请求返回以下错误:

引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError:HTTP 错误 403:禁止

网站上的例子在这个link: https://www.neutrinoapi.com/api/api-examples/python/

提供的示例使用 python 2.7 和 urllib2,据我所知,urllib2 现在已内置到 urllib 中。似乎无法让请求在 Python 中工作 3. 关于如何提出正确请求的任何想法?

Python 示例未将 JSON 用于 参数 ,仅用于响应。您需要 URL 编码 这些参数;为此使用 urllib.parse.urlencode() function,然后将结果字符串编码为字节。

您还需要为 bad-word-filter 请求发送 content 参数,而不是 IP 地址:

from urllib.parse import urlencode

url = 'https://neutrinoapi.com/bad-word-filter'
params = {
    'user-id': 'testing',
    'api-key': '<valid api key>',
    'content': 'foo bar baz'
}

encoded_params = urlencode(params).encode('utf8')
response = urllib.request.urlopen(url, data = encoded_params)
result = json.loads(response.read())