【问题标题】:How to structure a request to neutrinoapi using python 3? (convert urllib2 request to urllib)如何使用 python 3 构造对 neutrinoapi 的请求? (将 urllib2 请求转换为 urllib)
【发布时间】:2017-01-28 22:52:49
【问题描述】:

我是服务器端代码的新手,并且有兴趣使用 neutrinoapi (www.neutrinoapi.com) 从文本中过滤掉一些坏词。我在 Python 3 中编写了以下代码(我使用瓶子服务器):

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:禁止

网站上的示例位于此链接: https://www.neutrinoapi.com/api/api-examples/python/

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

【问题讨论】:

    标签: python python-3.x urllib2 urllib


    【解决方案1】:

    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())
    

    【讨论】:

    • 谢谢!这非常有效。我在示例中错过了它,但它非常有意义。
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2016-07-28
    • 2023-02-14
    • 1970-01-01
    相关资源
    最近更新 更多