Python web services client examples

  • Release version: Australia
  • Updated March 12, 2026
  • 4 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Python Web Services Client Examples

    This document provides examples of integrating with ServiceNow using a Python web services client, demonstrating how to perform various operations such as creating incidents, retrieving keys, and querying records with SOAPpy.

    Show full answer Show less

    Requirements

    To run the examples, ensure the installation of the following Python modules:

    • fpconst
    • PyXML
    • SOAPpy

    Key Features

    Examples include:

    • Creating an Incident: Demonstrates how to insert an incident into ServiceNow using the SOAP protocol. You need to set parameters like impact, urgency, priority, and more.
    • Getting Keys: Shows how to execute a query to retrieve keys for a specified category.
    • Getting Records: Queries incidents based on category and displays the retrieved records.
    • Getting Specific Record: Fetches an incident record by its sysid.
    • Advanced Logging: Illustrates a script that monitors a log file for specific keywords and creates corresponding ECC Queue records.

    Key Outcomes

    By following these examples, ServiceNow customers can:

    • Effectively integrate Python applications with ServiceNow to manage incidents.
    • Automate incident creation and retrieval processes, enhancing operational efficiency.
    • Monitor logs and respond to specific conditions programmatically, improving incident management and response times.

    Examples demonstrating an integration with a Python web services client.

    Requirements

    The following examples require the installation of the following Python modules:

    insert

    This is an example of inserting an incident.
    #!/usr/bin/python
     
     from SOAPpy  import SOAPProxy
     import sys
     
     def createincident (params_dict ):
     
             # instance to send to
            instance = 'demo'
     
             # username/password
            username = 'itil'
            password = 'itil'
     
     
             # proxy - NOTE: ALWAYS use https://INSTANCE.service-now.com, not https://www.service-now.com/INSTANCE for web services URL from now on!
            proxy  = 'https://%s:%s@%s.service-now.com/incident.do?SOAP' %  (username , password , instance )
            namespace  = 'http://www.service-now.com/'
            server  = SOAPProxy (proxy , namespace )
     
             # uncomment these for LOTS of debugging output #server.config.dumpHeadersIn = 1 #server.config.dumpHeadersOut = 1 #server.config.dumpSOAPOut = 1 #server.config.dumpSOAPIn = 1
     
            response  = server. insert (impact = int (params_dict [ 'impact' ] ) , urgency = int (params_dict [ 'urgency' ] ) , priority = int (params_dict [ 'priority' ] ) , category =params_dict [ 'category' ] , location =params_dict [ 'location' ] , caller_id =params_dict [ 'user' ] , assignment_group =params_dict [ 'assignment_group' ] , assigned_to =params_dict [ 'assigned_to' ] , short_description =params_dict [ 'short_description' ] , comments =params_dict [ 'comments' ] )
     
             return response
     
    values  = { 'impact':  '1' , 'urgency':  '1' , 'priority':  '1' , 'category':  'High' , 'location':  'San Diego' , 'user':  'fred.luddy@yourcompany.com' , 'assignment_group':  'Technical Support' , 'assigned_to':  'David Loo' , 'short_description':  'An incident created using python, SOAPpy, and web services.' , 'comments':  'This a test making an incident with python.\n Isn \' t life wonderful?' }
     
    new_incident_sysid =createincident (values )
     
     print "Returned sysid: "+ repr (new_incident_sysid )

    getKeys

    This is an example of executing getKeys on the demo instance using basic authentication.
    #!/bin/env python
     
     # use the SOAPpy module from SOAPpy  import SOAPProxy
     
    username , password , instance  = 'admin' , 'admin' , 'demo'
    proxy , namespace  = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
     
    server  = SOAPProxy (proxy ,namespace )
    response  = server. getKeys (category  = 'Network' )
     
     print response. sys_id. split ( ',' )

    getRecords

    In this example, we get an incident, querying for category == "Network" (with basic authentication).
    #!/bin/env python
     
     # use the SOAPpy module from SOAPpy  import SOAPProxy
     
    username , password , instance  = 'admin' , 'admin' , 'demo'
    proxy , namespace  = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
     
    server  = SOAPProxy (proxy ,namespace )
    response  = server. getRecords (category  = 'Network' )
     
     for record  in response:
    	 for item  in record:
    		 print item

    get

    In this example, we get an incident record by sys_id (with basic authentication).
    #!/bin/env python
     
     # use the SOAPpy module from SOAPpy  import SOAPProxy
     
    username , password , instance  = 'admin' , 'admin' , 'demo'
    proxy , namespace  = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
     
    server  = SOAPProxy (proxy ,namespace )
    response  = server. get (sys_id  = '9c573169c611228700193229fff72400' )
     
     for each  in response:
    	 print each

    Advanced

    This is an example of advanced Python script that reads a log file for a keyword invalid spi and creates an ECC Queue record where the payload is set to an alert of XML format.
    #!/bin/env python
     
     # kevin.pickard@service-now.com			2008.07.03		initial creation
     
     from SOAPpy  import SOAPProxy
     from xml. dom. minidom import getDOMImplementation
     import sys , os , socket , pickle , re
     
     # instance to send to
    instance = 'demo'
     
     # username/pass
    username = 'admin'
    password = 'admin'
     
     # log file to watch
    syslogfile = '/var/log/cisco.log.ksp'
     
     # state file
    statefile = '/tmp/syslog_ecc.state-test'
     
     # ECC queue values
    soapagent = 'SOAPpy'
    ecctopic = 'PIX Error: '
    eccname = 'Invalid SPI: '
    eccsource = 'Syslog'
     
     # regex string to match
    matchstring = 'invalid spi'
     
     try:
    	state = open (statefile , 'r' )
    	lastbyte = pickle. load (state )
    	state. close ( ) except:
    	lastbyte = 0
     
     #print 'DEBUG: lastbyte = '+str(lastbyte)
     
     try:
    	log = open (syslogfile , 'ro' ) except:
    	errortopic = 'Script Error'
    	errorname = 'Unable to open log file '+syslogfile+ '.'
    	errorpayload = 'This message was generated due to an error condition encountered in a script.  The name of the script is '+ os. path. basename ( sys. argv [ 0 ] )+ ' on server '+ socket. gethostname ( )+ '.'
     
    	proxy  = 'https://'+username+ ':'+password+ '@'+instance+ '.service-now.com/ecc_queue.do?SOAP'
    	namespace  = 'http://www.service-now.com/'
    	server  = SOAPProxy (proxy , namespace )
    	server. config. dumpSOAPOut = 1 
    	server. config. dumpSOAPIn = 1 
            response  = server. insert (agent =soapagent , topic =errortopic , name =errorname , source = sys. argv [ 0 ] , payload =errorpayload )
     
    	 sys. exit ( 1 )
     
     if lastbyte  != 0:
    	 try:
    		log. seek (lastbyte ) except IOError:
    		 pass
     
    loglines =log. readlines ( )
     
    lastbyte =log. tell ( )
     
    log. close ( )
     
    state = open (statefile , 'w' ) pickle. dump (lastbyte , state )
    state. close ( )
     
     # regex out the line
    matchedlines = [ ] for line  in loglines:
    	 if re. search (matchstring , line ) != None:
    		matchedlines. append (line )
     
     #print 'DEBUG: len->loglines = '+str(len(loglines)) #print 'DEBUG: lastbyte = '+str(lastbyte) #print 'DEBUG: matchedlines = '+str(matchedlines)
     
     if len (matchedlines ) == 0:
    	 sys. exit ( 0 )
     
    proxy  = 'https://'+username+ ':'+password+ '@'+instance+ '.service-now.com/ecc_queue.do?SOAP'
    namespace  = 'http://www.service-now.com/'
     
    server  = SOAPProxy (proxy , namespace ) #server.config.dumpSOAPOut = 1 #server.config.dumpSOAPIn = 1
     
    entriestosend = { } for line  in matchedlines:
    	device =line. split ( ) [ 3 ]
    	sourceip =line. split ( ) [- 1 ]
    	entriestosend [sourceip ] = [device , line ]
     
     for key ,value  in entriestosend. iteritems ( ):
    	 #impl=getDOMImplementation() #newdoc = impl.createDocument(None, "log_line", None) #top_element = newdoc.documentElement #text = newdoc.createTextNode(value[1]) #top_element.appendChild(text)
     
    	response  = server. insert (agent =soapagent , topic =ecctopic+value [ 0 ] , name =eccname+key , source =eccsource , payload =value [ 1 ] )