Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python 2.7验证Tableau REST API_Python_Xml_Rest_Tableau Api_Elementtree - Fatal编程技术网

使用Python 2.7验证Tableau REST API

使用Python 2.7验证Tableau REST API,python,xml,rest,tableau-api,elementtree,Python,Xml,Rest,Tableau Api,Elementtree,我有一个与最近回答的问题类似的问题: 我使用了相同的代码,但得到了不同的错误。确认我正在为Tableau服务器版本调用正确的API版本 from urllib2 import urlopen, Request import xml.etree.ElementTree as ET # for parsing XML responses server_name = "http://dashboard.myorg.org" user_name = "abc" password = "abc" site

我有一个与最近回答的问题类似的问题:

我使用了相同的代码,但得到了不同的错误。确认我正在为Tableau服务器版本调用正确的API版本

from urllib2 import urlopen, Request
import xml.etree.ElementTree as ET # for parsing XML responses
server_name = "http://dashboard.myorg.org"
user_name = "abc"
password = "abc"
site_url_id = ""
signin_url = "{server}/api/2.4/auth/signin".format(server=server_name)
request_xml = ET.Element('tsRequest')
credentials = ET.SubElement(request_xml, 'credentials',
                            name=user_name, password=password)
site_element = ET.SubElement(credentials, 'site',
                             contentUrl=site_url_id)

request_data = ET.tostring(request_xml)

req = Request(signin_url, data=request_data)
req = urlopen(req)

server_response = req.read
response_xml = ET.fromstring(server_response)
token = response_xml.find('.//t:credentials',
                          namespaces={'t': "http://tableau.com/api"}).attrib['token']
site_id = response_xml.find('.//t:site',
                          namespaces={'t': "http://tableau.com/api"}).attrib['id']
print('Sign in successful!')
print('/tToken: {token}'.format(token=token))
print('/tSite ID: {site_id}'.format(site_id=site_id))
headers = {'X-tableau-auth': token}
signout_url = "{server}/api/2.4/auth/signout".format(server=server_name)
req = Request(signout_url, headers=headers, data=b'')
req = urlopen(req)
print('Sign out successful!')
我的错误是:

Traceback (most recent call last):
  File "api_call.py", line 20, in <module>
    response_xml = ET.fromstring(server_response)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1311, in XML
    parser.feed(text)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1311, in feed
    self._parser.Parse(data, 0)
TypeError: Parse() argument 1 must be string or read-only buffer, not instancemethod
回溯(最近一次呼叫最后一次):
文件“api_call.py”,第20行,在
response\u xml=ET.fromstring(服务器响应)
文件“C:\Python27\lib\xml\etree\ElementTree.py”,第1311行,xml格式
parser.feed(文本)
文件“C:\Python27\lib\xml\etree\ElementTree.py”,第1311行,在提要中
self.\u parser.Parse(数据,0)
TypeError:Parse()参数1必须是字符串或只读缓冲区,而不是instancemethod

如@mzjn所述,问题通过更新解决

server_response = req.read


我尝试在server_response中打印该值,该项被标识为实例方法而不是字符串。我得到如下结论:我认为
server\u response=req.read
应该是
server\u response=req.read()
@mzjn,它完全解决了这个问题。谢谢因此,如果没有括号,我调用的是方法,而不是方法包含的字符串?如果没有括号,您就没有调用方法。
server_response = req.read()