2016-07-13 15 views
1

ユーザの選択に基づいてCGIスクリプトを実行するpython/tkプログラムがあります。私はちょうど1つの特定のcgiスクリプトに焦点を絞った小さなスクリプトにこれをカットするように取り組んでいます。セッションIDを正しく取得しているようですが、ブラウザを起動すると「アクセス拒否」が発生し続けます。他のプログラムが動作するので、私はウェブサイトからの問題を期待していません。どんな助けもありがとう。有効なセッションIDを受け取った後にアクセスが拒否される

UPDATE: 私はデバッガを使用し、下図のように、ライン印刷URLコンソールに印刷されたURLにブレークポイントを設定した場合は、作業を行います。私は今、セッションIDトークンが良いことを知っています。また

ウェブブラウザ機能とかけてステップへのI ステップであればスクリプトでも働くことの後。

ここに私のコードです。

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 
+0

ウェブサーバーはセッションIDと共にクッキーを期待していますか?または、セッションIDがクエリ文字列ではなくクッキーとして配信されることを期待していますか? –

+0

いいえ。これは完全に動作するpython/tkアプリケーションで使われている形式です。 –

答えて

0

は解決しました。スクリプトは終了していたので、ブラウザがリクエストに応答する前にソケットを閉じる

関連する問題