收到有效的会话ID

时间:2016-07-13 16:43:06

标签: python session websocket tornado

我有一个工作的python / tk程序,它根据用户选择运行cgi脚本。我正在努力将其缩减为一个只关注一个特定cgi脚本的小脚本。它似乎正在正确获取会话ID,但是当我启动浏览器时,我不断获得"访问被拒绝"。由于其他程序的工作,我不期待从网站上的任何问题。任何帮助将不胜感激。

更新 如果我使用调试器并在打印网址行设置断点,则控制台中打印的网址(如下所示)可以正常工作。我现在知道会话ID令牌是好的。

此外,如果我进入 webbrowser功能,然后跳过,之后脚本也会有效。

这是我的代码。

import json
import tornado.web
import tornado.websocket
from tornado import gen
import tornado.ioloop
import webbrowser
from struct import *

request_id = 71
ip_address = "10.22.4.14"


# ************************************************
# Procedure to open websocket and get session id
# ***********************************************
@gen.coroutine
def open_ws(ip, username, password):
    global client
    global request_id
    global session_id

    ws_url = "ws://" + ip + ":7011/"

    try:
        client = yield tornado.websocket.websocket_connect(ws_url, None, None, 5, None, None)
        # print("websocket %s open" % ws_url)
    except error:
        exit()

    # Send Mercury login request
    JSON = '{"requests":[{"request_id": %s, "login":{"username": "%s","password": "%s"}}]}' % (str(request_id), username, password)

    client.write_message(JSON)
    results = yield client.read_message()
    # print("msg is %s" % results)

    # Parse the response of login request to get the error code
    parsed_json = json.loads(results)
    err_code = parsed_json['responses'][0]['request_response']['result']['err_code']

    if 0 == err_code:
        # Parse the response of get_command_result to get the session id
        session_id = parsed_json['responses'][0]['request_response']['login']['session_id']
        # print("login succeeded - session id: %s" % session_id)
    else:
        print("login failed")
    # error_exit(err_code)


def get_token():
tornado.ioloop.IOLoop.instance().run_sync(lambda: open_ws(ip_address, 'admin', 'admin'))
    return session_id

session_id = get_token()
print "Token is " + session_id

url = "http://" + ip_address + "/scripts/dostuff.cgi?session=" + session_id
print url  # add breakpoint here

# launch browser
webbrowser.open(url)

控制台输出:

Token is 7zNSZX9liaUDFFN0ijn-LWQ8
http://10.222.4.14/scripts/dostuff.cgi?session=7zNSZX9liaUDFFN0ijn-LWQ8

1 个答案:

答案 0 :(得分:0)

解决。脚本结束因此在浏览器有机会响应请求之前关闭套接字