python requests POST基本认证返回200,但是返回的body是空的
2016-3-8 19:13:59
收藏:0
阅读:86
评论:2
import requests
s = requests.Session()
r = requests.Request('POST', 'https://'+url+'?name=value')
prep = r.prepare()
prep.headers = {'User-Agent': 'curl/7.38.0', 'Accept': '*/*', 'Authorization': 'Basic <load of hex>==', 'Content-Type': 'application/json'}
response = s.send(prep)
输出:
DEBUG:requests.packages.urllib3.connectionpool:"POST /url?name=value HTTP/1.1" 200 None
我为什么会得到200表示认证成功,却没有返回令牌的JSON(如果我篡改Authorization头,则按预期返回403)。
我直接从与同一服务成功的curl请求中取出请求头。为什么requests什么都不返回呢?
成功的cURL日志:
$ curl -v https://url?name=value -X POST -H "Content-Type: application/json" -u <user:secret>
* Hostname was NOT found in DNS cache
* Trying <ip>...
* Connected to url port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3,TLS握手,客户端你好(1):
* SSLv3,TLS握手,服务器你好(2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3,TLS更改密码,客户端你好(1):
* SSLv3,TLS握手,完成(20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL连接使用TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384
* 服务器证书:
* <cert detail>
* SSL证书验证好了。
* 服务器使用带有用户“<user>”的基本认证
> POST url?name=value HTTP/1.1
> Authorization: Basic <hex encoded string>==
> User-Agent: curl/7.38.0
> Host: <host>
> Accept: */*
> Content-Type: application/json
>
< HTTP/1.1 200 OK
* Server openresty/1.7.4.1 is not blacklisted
< Server: openresty/1.7.4.1
< Date: Tue, 08 Mar 2016 15:47:08 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Correlation-Id: <id>
< Strict-Transport-Security: max-age=31536000
< Cache-Control: private, no-cache, no-store, no-transform, max-age=0
< X-XSS-Protection: 1; mode=block
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< X-Content-Type-Options: nosniff
< X-Frame-Options: deny
<
{"access_token": "<hex value>", "token_type": "bearer", "expires_in": "3599", "scope": "<bunch of authorisations>", "jti": "<string>"}
* 连接主机#0 <host>保持不变
点赞
用户6858244
我会不同地使用 requests,我会这样做:
from requests import Session
s = Session()
url = 'abc.com'
headers = {'User-Agent': 'blah', 'Authorization': 'Basic <hex>==', 'Accept': '*/*', 'Content-Type': 'application/json'}
# 添加头部信息
s.headers.update(headers)
res = s.post(url)
data = res.json()
你可以通过 data={'key':'value'} 作为你的 POST 载荷传递,但不知道你的 url,我只能猜测。
2019-06-16 19:13:32
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
当我使用 requests 时,服务器返回了一个空响应(尽管身份验证成功且 HTTP 状态码为 200)。
我不知道如何使用 requests 避免这种情况,所以我使用了普通的 urllib:
import urliblib.request headers = {'User-Agent': 'blah', 'Authorization': 'Basic <hex>==', 'Accept': '*/*', 'Content-Type': 'application/json'} req = urllib.request.Request(url, headers=headers, method='POST') print(urllib.request.urlopen(req).readlines())现在响应返回了正确的数据。我认为服务器存在一些缓存问题,因为现在当我使用所有请求通过 urllib 添加的额外标头时,我会得到类似的成功响应。