The above is the value in the address box below, but the invalid URI is displayed when the form is submitted
If it’s typed directly into the url box there’s no problem, how do you solve that problem?
Here is an example code of subscription using Python 3. Take a look at the formatting of the URLs. I hope it can give you some guidance.
import sys, argparse
import xml.etree.ElementTree as ET
from ws4py.client.threadedclient import WebSocketClient
import requests
import json
from requests.auth import HTTPDigestAuth
namespace = '{http://www.w3.org/1999/xhtml}'
def print_event(evt):
root = ET.fromstring(evt)
if root.findall(".//{0}li[@class='pnl-ctrlstate-ev']".format(namespace)):
print ("\tController State : " + root.find(".//{0}li[@class='pnl-ctrlstate-ev']/{0}span".format(namespace)).text)
if root.findall(".//{0}li[@class='pnl-opmode-ev']".format(namespace)):
print ("\tOperation Mode : " + root.find(".//{0}li[@class='pnl-opmode-ev']/{0}span".format(namespace)).text)
if root.findall(".//{0}li[@class='pnl-speedratio-ev']".format(namespace)):
print ("\tSpeed Ratio : " + root.find(".//{0}li[@class='pnl-speedratio-ev']/{0}span".format(namespace)).text)
class RobWebSocketClient(WebSocketClient):
def opened(self):
print ("Web Sockect connection established")
def closed(self, code, reason=None):
print ("Closed down", code, reason)
def received_message(self, event_xml):
if event_xml.is_text:
print ("Events : ")
print_event(event_xml.data.decode("utf-8"))
else:
print ("Received Illegal Event " + str(event_xml))
class RWPanel:
def __init__(self, host, username, password):
self.host = host
self.username = username
self.password = password
self.digest_auth = HTTPDigestAuth(self.username,self.password)
self.subscription_url = 'http://{0}/subscription'.format(self.host)
self.session = requests.Session()
def subscribe(self):
payload = {'resources':['1','2','3'],
'1':'/rw/panel/speedratio',
'1-p':'1',
'2':'/rw/panel/ctrlstate',
'2-p':'1',
'3':'/rw/panel/opmode',
'3-p':'1'}
resp = self.session.post(self.subscription_url , auth=self.digest_auth, data=payload)
print ("Initial Events : ")
print_event(resp.text)
if resp.status_code == 201:
self.location = resp.headers['Location']
self.cookie = '-http-session-={0}; ABBCX={1}'.format(resp.cookies['-http-session-'],
resp.cookies['ABBCX'])
return True
else:
print ('Error subscribing ' + str(resp.status_code))
return False
def start_recv_events(self):
self.header = [('Cookie',self.cookie)]
self.ws = RobWebSocketClient(self.location,
protocols=['robapi2_subscription'],
headers=self.header)
self.ws.connect()
self.ws.run_forever()
def close(self):
self.ws.close()
def main():
try:
parser = argparse.ArgumentParser()
parser.add_argument("-host",help="The host to connect. Defaults to localhost on port 80", default='localhost:80')
parser.add_argument("-user",help="The login user name. Defaults to default user name", default='Default User')
parser.add_argument("-passcode",help="The login password. Defaults to default password", default='robotics')
if rwpanel.subscribe():
rwpanel.start_recv_events()
except KeyboardInterrupt:
rwpanel.close()
if __name__ == "__main__":
main(sys.argv[1:])
Thank you for your reply code, carefully watched the processes, including robot signal subscription I understand it, but where the program is to determine whether a state of the signal has been changed, to read the robot again the value of the signal, I play in you program the breakpoint debugging, but every time modify the robot parameters, can jump directly below the code position;