在 python 请求中使用 headers 和基本身份验证

use headers and basic authentication in python requests

我有考试url

https://test.app.com/api/rest

为了访问 url 及其内容,需要将 headers 作为

发送
headers={"Content-Type":"application/json"}

还要使用基本身份验证,其中凭据是

username=apple , password=ball

我用过

from requests.auth import HTTPBasicAuth

requests.post(URL,auth=HTTPBasicAuth(username, password),
                                 data=data,
                                 headers=headers)

这是向 url 发送 post 请求的正确方法,同时发送 headers 和基本身份验证吗?

总的来说:是的,看起来还可以。

但有些 notes/fixes/hints:

  1. BasicAuth 可以仅用作元组,因此 auth=(username, password) 就足够了 - docs say that BasicAuth is common that it they made it a shorthand

  2. 当你做任何请求时,你应该保存它的结果以了解它是否成功并诊断它。通常 r = requests.post(...) 就足够了。然后您可以手动检查 r.status_code(并检查 r.content)或执行 r.raise_for_status() 以获得 4xx 和 5xx 代码的错误。

    r.raise_for_status() 将仅根据代码本身及其外观引发错误。但有时 r.content 可能会提供有关实际损坏的信息 - 例如“400 错误请求”,而响应可能在其内容中缺少哪些字段)。

  3. 至于jsonheader和data=data...另一个shorthand。 data= 要求您以希望直接发送的形式传递数据。但是 requests lib 知道很多时候我们想要发送 json 数据,所以他们实现了一个 json= 参数——它负责将你的 dict/list 结构转换为 json 并设置 content-type header!

所以在你的情况下:

data = {"example": "data"}
r = requests.post(URL, # save the result to examine later
                  auth=(username, password), # you can pass this without constructor
                  json=data) # no need to json.dumps or add the header manually!

如果要发送json数据,只需将数据替换为json即可。其他领域没问题。