【问题标题】:How do you use a POST URI in Python?如何在 Python 中使用 POST URI?
【发布时间】:2020-04-07 02:02:31
【问题描述】:

我正在尝试在我的代码中使用 POST URI 来访问 NCBO 的注释器工具。我当前的代码是 GET 请求,但我不知道如何将其格式化为 POST 请求。我的数据是文本变量。

我看到的所有示例都使用request.get(url) -> request.post(url, data=data),但我该如何为build_opener()json.loads() 执行此操作?

这是我的代码:

def get_json(url):
#get annotations
    opener = urllib.request.build_opener()
    opener.addheaders = [('Authorization', 'apikey token=' + API_KEY)]
    return json.loads(opener.open(url).read())

text = "random text with a lot of words"
annotations = get_json("http://data.bioontology.org/annotator?text=" + urllib.parse.quote(text))

更新代码:

def get_annotations(text, url):
    headers = [('Authorization', 'apikey token=' + API_KEY)]
    data = text

    response = requests.request("POST",url,headers=headers,data=data)
    return response.text.encode('utf-8')

annotations = get_annotations(text, "http://data.bioontology.org/annotator?text=" + urllib.parse.quote(text))

错误:

    response = requests.request("POST",url,headers=headers,data=data)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/sessions.py", line 449, in prepare_request
    p.prepare(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/models.py", line 315, in prepare
    self.prepare_headers(headers)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/models.py", line 447, in prepare_headers
    for header in headers.items():
AttributeError: 'list' object has no attribute 'items'

【问题讨论】:

    标签: python python-3.x post get uri


    【解决方案1】:

    我会推荐你​​导入请求模块,这个模块很容易选择请求方法。

    import requests
    def get_json(url):
        headers = [('Authorization', 'apikey token=' + API_KEY)]  #add headers here
        data = #params you want to send
    
        response = requests.request("POST",url,headers=headers,data=data)  #you can choose your methods here.
        return response.text.encode('utf-8')
    

    FYR 就是这样。

    【讨论】:

    • 您好,非常感谢您的回复!我尝试了代码并收到了一个属性错误(编辑了我的原始帖子以添加新代码+错误消息)。当我访问该页面时,我需要将文本放在 URL 中,如下所示:“...?text=" + data.使用 POST 时,它会自动填充缺失的文本部分吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2016-02-25
    • 2017-08-13
    相关资源
    最近更新 更多