如何解决在 urllib3 中将 cookie 作为标头传递时“重定向过多”
我一直通过 Postman 调用 API,现在尝试使用 urllib3 转换为 Python。
有两个步骤。 (1) 调用api,接收一个包含token的cookie。 (2) 再次调用api,传入上面的cookie,也把token作为单独的参数传入。
这是 2 号电话的邮递员代码:
var client = new RestClient("http://xxxxxxx.xxxxxxx.xxxx.xxx:8080/xxx/xxxxxxxxx?j_username=xxxxxxx&j_password=xxxxxxxxxxx&_csrf=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Cookie","JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; XSRF-TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
现在我的 Python 代码可以工作了,但是当我不包含标题 cookie 时会返回 403。 但是当我尝试包含标题 cookie 时,我得到:
超过了 url 的最大重试次数: http://xxxxxxxxxx.xxxxxxx.xxxx.xxx:8080/xxx/login(由 ResponseError('重定向过多'))
任何想法我可能做错了什么? 我认为这是我构建/传递我的 cookie 的方式!?
下面的代码(“Call 2”是损坏的部分)
import urllib3
from urllib.parse import urlencode
# Credentials
#== constants
user_id = 'xxxxxxxx'
password = 'xxxxxxxxxxx'
url_stem = 'http://xxxxxxxxxx.xxxxxxx.xxxx.xxx:8080/xxx/xxxxxxxxxxxxxxxxxx'
#== Call 1 Prepare
encoded_args = urlencode({'j_username': user_id,'j_password':password})
url = url_stem + '?' + encoded_args
# == Call 1 (expected to return a cookie & status of 403)
http = urllib3.PoolManager()
r = http.request(
'POST',url
)
print('[][Status]: %s' % r.status)
#[][Status]: 403
# - get cookie info
cookie_1 = r.headers['Set-Cookie']
cookie_parts = cookie_1.split(';')
cookie_xsrf = cookie_parts[0].strip()
cookie_session = cookie_parts[1].split(',')[1].strip()
xsrf = cookie_xsrf.split('=')[1].strip()
# Examine Cookie parts:
print('')
print('[][cookie_1]: %s' % cookie_1)
#[][cookie_1]: XSRF-TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Path=/qdc,JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxxxxx; Path=/qdc; HttpOnly
print('[][cookie_xsrf]: %s' % cookie_xsrf)
#[][cookie_xsrf]: XSRF-TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
print('[][cookie_session]: %s' % cookie_session)
#[][cookie_session]: JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxxxxx
print('[][XSRF_Token]: %s' % xsrf)
#[][XSRF_Token]: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# ==========================
# == Call 2 ================
# ==========================
# pass in: (1) original cookie (2) Previous Token as param (_csrf)
encoded_args = urlencode({'j_username': user_id,'j_password':password,'_csrf':xsrf})
url = url_stem + '?' + encoded_args
myheaders = {'Cookie':cookie_session +';'+ cookie_xsrf}
print('[][url_2]: %s' % url)
#[][url_2]: http://xxxxxxxxxx.xxxxxxx.xxxx.xxx:8080/xxx/xxxxxxxxxxxxxxxxxx?j_username=xxxxxxx&j_password=xxxxxxxxxxx&_csrf=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
print('[][myheaders]: %s' % myheaders)
#[][myheaders]: {'Cookie': 'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxxxxx;XSRF-TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'}
r = http.request(
'POST',url,headers=myheaders
)
print('')
print('[][Status]: %s' % r.status)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。