如何使用 python 和 pycurl 访问 Bugzilla 上错误的 XML 页面?
How to access a bug's XML page on Bugzilla using python with pycurl?
我无法使用它的网络服务从 Bugzilla(我的版本是 4.2.5)上的错误中检索所有信息(例如评论、附件、估计时间...)。我拥有漏洞的所有 ID,并且正在尝试根据 URL 访问它们以获取漏洞的 XML 格式。
我听说 Bugzilla API 不允许通过 cookie 进行访问。所以我有以下内容,但即使提供了正确的用户名和密码,我也一直卡在登录页面。这是我目前所拥有的:
pf = {'username' : 'my_username', 'password' : 'my_password' }
fields = urllib.urlencode(pf)
pageContents = StringIO.StringIO()
p = pycurl.Curl()
p.setopt(pycurl.FOLLOWLOCATION, 1)
p.setopt(pycurl.COOKIEFILE, './cookie_test.txt')
p.setopt(pycurl.COOKIEJAR, './cookie_test.txt')
p.setopt(pycurl.POST, 1)
p.setopt(pycurl.POSTFIELDS, fields)
p.setopt(pycurl.WRITEFUNCTION, pageContents.write)
p.setopt(pycurl.VERBOSE, True)
p.setopt(pycurl.DEBUGFUNCTION, test)
p.setopt(pycurl.URL, 'https://somewebsite.com/viewXMLof=[ENTER-BUG-ID-HERE]')
p.perform()
p.close() # This is mandatory.
pageContents.seek(0)
for x in pageContents.readlines() :
print x
所以我得到的显示如下:
<html lang="en">
<head>
<title>Log in to Website</title>
.
.
.
这意味着我还在登录页面。有什么建议么?
如果需要进一步解释,请告诉我。
Bugzilla 使用 XML-RPC 或 JSON-RPC。参见 https://www.bugzilla.org/docs/4.4/en/html/api/Bugzilla/WebService.html and http://xmlrpc.scripting.com/spec
使用 XML-RPC,您需要 POST 一个 XML 文档到 mybugzilla.com/xmlrpc.cgi URL。下面是获取 Bugzilla 时间信息的示例。
<?xml version="1.0"?>
<methodCall>
<methodName>Bugzilla.time</methodName>
<params>
<param>
<struct>
<member>
<name>Bugzilla_login</name>
<value>user@example.com</value>
</member>
<member>
<name>Bugzilla_password</name>
<value>password</value>
</member>
</struct>
</param>
</params>
</methodCall>
要获取特定错误,请使用 Bug.get 方法和这样的参数元素:
<param>
<struct>
<member>
<name>Bugzilla_login</name>
<value>user@example.com</value>
</member>
<member>
<name>Bugzilla_password</name>
<value>password</value>
</member>
<member>
<name>ids</name>
<value>
<array>
<data>
<value>
<int>1</int>
</value>
</data>
</array>
</value>
</member>
</struct>
</param>
此外,您可以使用 http://xmlrpc.devzing.com/ 来帮助您测试 XML-RPC 调用并了解响应。
我无法使用它的网络服务从 Bugzilla(我的版本是 4.2.5)上的错误中检索所有信息(例如评论、附件、估计时间...)。我拥有漏洞的所有 ID,并且正在尝试根据 URL 访问它们以获取漏洞的 XML 格式。
我听说 Bugzilla API 不允许通过 cookie 进行访问。所以我有以下内容,但即使提供了正确的用户名和密码,我也一直卡在登录页面。这是我目前所拥有的:
pf = {'username' : 'my_username', 'password' : 'my_password' }
fields = urllib.urlencode(pf)
pageContents = StringIO.StringIO()
p = pycurl.Curl()
p.setopt(pycurl.FOLLOWLOCATION, 1)
p.setopt(pycurl.COOKIEFILE, './cookie_test.txt')
p.setopt(pycurl.COOKIEJAR, './cookie_test.txt')
p.setopt(pycurl.POST, 1)
p.setopt(pycurl.POSTFIELDS, fields)
p.setopt(pycurl.WRITEFUNCTION, pageContents.write)
p.setopt(pycurl.VERBOSE, True)
p.setopt(pycurl.DEBUGFUNCTION, test)
p.setopt(pycurl.URL, 'https://somewebsite.com/viewXMLof=[ENTER-BUG-ID-HERE]')
p.perform()
p.close() # This is mandatory.
pageContents.seek(0)
for x in pageContents.readlines() :
print x
所以我得到的显示如下:
<html lang="en">
<head>
<title>Log in to Website</title>
.
.
.
这意味着我还在登录页面。有什么建议么?
如果需要进一步解释,请告诉我。
Bugzilla 使用 XML-RPC 或 JSON-RPC。参见 https://www.bugzilla.org/docs/4.4/en/html/api/Bugzilla/WebService.html and http://xmlrpc.scripting.com/spec
使用 XML-RPC,您需要 POST 一个 XML 文档到 mybugzilla.com/xmlrpc.cgi URL。下面是获取 Bugzilla 时间信息的示例。
<?xml version="1.0"?>
<methodCall>
<methodName>Bugzilla.time</methodName>
<params>
<param>
<struct>
<member>
<name>Bugzilla_login</name>
<value>user@example.com</value>
</member>
<member>
<name>Bugzilla_password</name>
<value>password</value>
</member>
</struct>
</param>
</params>
</methodCall>
要获取特定错误,请使用 Bug.get 方法和这样的参数元素:
<param>
<struct>
<member>
<name>Bugzilla_login</name>
<value>user@example.com</value>
</member>
<member>
<name>Bugzilla_password</name>
<value>password</value>
</member>
<member>
<name>ids</name>
<value>
<array>
<data>
<value>
<int>1</int>
</value>
</data>
</array>
</value>
</member>
</struct>
</param>
此外,您可以使用 http://xmlrpc.devzing.com/ 来帮助您测试 XML-RPC 调用并了解响应。