2016-12-07 64 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]