Why are all the urls I filled in my subscription invalid?What format should it be?


image.png
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;