如何使用python 3

时间:2016-12-07 02:32:54

标签: python sessionid

我是一个菜鸟,我需要使用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。什么是最好的方式来解决这个问题。

2 个答案:

答案 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]