0

我是 python 的新手,正在尝试创建一个脚本来登录坩埚并使用令牌传递给其他服务。1) 我能够发出 xml 请求并获得响应,但只要我将标头传递给我的 conn.request,它就会显示 HTTP 错误 415,不支持的媒体类型。我对这个主题做了一些安静的研究,发现其余的 API 可能不支持 json 请求,但 Crucible 说 API 支持 json 所以似乎是其他一些问题,2)在尝试传递参数时使用 feauth 生成的身份验证令牌没有被使用,现在我已将其附加到 url 并且它可以工作。

请帮助我,下面是我的脚本

import httplib
import urllib
import json
from xml.etree.ElementTree import XML 
import xml.dom.minidom



    conn = httplib.HTTPSConnection("fisheye")
    args=urllib.urlencode({'userName':'UNAME', 'password':'PWD'})
    headers={'content-type':'application/json', 'accept':'application/json'}
    #headers={'Authorization' : 'Basic %s' % base64.b64encode("username:password")}

r1 = conn.request("post", "/rest-service/auth-v1/login", args)
#status = r1[u'headers']['status']

#conn.connect()


r2 = conn.getresponse()

print r1,r2.status,r2.reason,r2
r3=r2.read()
print(r3)
r4=str(r3)
print r4
data = XML(r4).find("token").text
print data

# data1=urllib.quote_plus(data, safe=":")
# print data1
args=urllib.urlencode({'FEAUTH':data}).replace("%3A", ":")
print "args is", args
#args={}

req = conn.request("get","/rest-service/reviews-v1")
r3 = conn.getresponse()
status = r3.status
print "the url is"#, r3.getheader('Location')
url=r3.getheader('location', '')
print url
url1=r3.msg#.dict['location']
print url1
#print req.url
#print req.get_method()
print dir(req)  # list lots of other stuff in Request

print "after sending open review request"
print r3

print req,r3.status,r3.reason,r3
r4=r3.read()
print(r4)
r5=str(r4)
print r5
# json_ob=json.loads(r3.read())
# print json_ob
4

2 回答 2

3

我能够通过

1) 从标题中删除 Content-Type 并将接受更改为 Accept(sentence cased)。

2) 登录请求是一个获取请求,因此它支持通过 URL 附加传输数据,它仅适用于发布请求,我们可以传递一个参数。

于 2013-03-11T07:51:10.543 回答
0

在请求的标头中,尝试指定媒体类型:

headers = { 'Content-Type' : 'application/json' }
req = urllib2.Request(url, headers=headers)
于 2013-03-07T08:44:38.537 回答