我是一个菜鸟,我需要使用sessionid发布其他命令,例如search.do,我使用Python 3.5,但我不确定获取和发布它的最佳方式。 这是我发布请求的方式。
import urllib.parse
url = 'https://myapi.application.com/dmapi/login.do'
values = {'account' : 'MYACCOUNT', 'username': 'admin', 'password': 'pas1234', 'appid':'12346'}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8') # data should be bytes
req = urllib.request.Request(url, data)
resp = urllib.request.urlopen(req)
respData = resp.read()
print(respData)
打印得到这个结果。
b'errorcode=0\r\nsessionid=ef9a9cbd-e063-4be2-9301-9de59891304c\r\n'
我需要在后续请求中使用sessionid。什么是最好的方式来解决这个问题。
答案 0 :(得分:0)
一个想法是split sessionid=
并提取最后一项:
>>> respData.split("sessionid=")[-1].strip()
'ef9a9cbd-e063-4be2-9301-9de59891304c'
另一种方法是使用正则表达式:
>>> import re
>>>
>>> re.search(r"sessionid=([A-Za-z0-9-]+)", respData).group(1)
'ef9a9cbd-e063-4be2-9301-9de59891304c'
答案 1 :(得分:0)
实际上响应由行(以字节为单位)组成,其中一行包含会话ID。你可以简单地阅读和解析你得到的东西:
resp = urllib.request.urlopen(req)
errorcode = None
sessionid = None
for line in resp.read():
line = line.strip() # remove end of line
if line.startswith(b'errorcode'):
errorcode = line.split(b'=')[1]
if line.startswith(b'sessionid'):
sessionid = line.split(b'=')[1]