2016-12-07 50 views
1

我是一个noob,我需要使用sessionid来发布其他命令,比如search.do,我使用Python 3.5,但我不确定获取和发布它的最佳方式。 这里是我如何发布请求。如何使用python发布sessionid 3

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

一种想法是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' 
0

实际上在线构成的响应(在字节),其中一个包含会话标识。你可以简单地阅读和解析你得到的:

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]