在 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:
BasicAuth 可以仅用作元组,因此 auth=(username, password)
就足够了 - docs say that BasicAuth is common that it they made it a shorthand
当你做任何请求时,你应该保存它的结果以了解它是否成功并诊断它。通常 r = requests.post(...)
就足够了。然后您可以手动检查 r.status_code
(并检查 r.content
)或执行 r.raise_for_status()
以获得 4xx 和 5xx 代码的错误。
r.raise_for_status()
将仅根据代码本身及其外观引发错误。但有时 r.content
可能会提供有关实际损坏的信息 - 例如“400 错误请求”,而响应可能在其内容中缺少哪些字段)。
至于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即可。其他领域没问题。
我有考试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:
BasicAuth 可以仅用作元组,因此
auth=(username, password)
就足够了 - docs say that BasicAuth is common that it they made it a shorthand当你做任何请求时,你应该保存它的结果以了解它是否成功并诊断它。通常
r = requests.post(...)
就足够了。然后您可以手动检查r.status_code
(并检查r.content
)或执行r.raise_for_status()
以获得 4xx 和 5xx 代码的错误。r.raise_for_status()
将仅根据代码本身及其外观引发错误。但有时r.content
可能会提供有关实际损坏的信息 - 例如“400 错误请求”,而响应可能在其内容中缺少哪些字段)。至于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即可。其他领域没问题。