私はRESTサービスでPOSTとPUTメソッドを使ってテストを行っています。XML - python:非公開タグを挿入してください
基本的に、私は両方のケースで、このXMLを使用:
xml = \
"""<?xml version="1.0" encoding="utf-8" ?>
<quser xmlns="http://user" xmlns:atom="http://www.w3.org/2005/atom">
<username>a_username</username>
<password>blablabla</password>
<first_name></first_name>
<last_name></last_name>
<email>[email protected]</email>
<degree></degree>
<institution></institution>
<fields>
<role>reader</role>
</fields>
<research_areas></research_areas>
</quser>"""
私はこのコードを使用してこのXML投稿する:
def post_resource(url, xml, content_type='application/xml'):
try:
request = urllib2.Request(url=url, data=xml)
request.add_header(key='content-type', val=content_type)
response = opener.open(request)
print_response(response)
except HTTPError, e:
print "Error: %s\n%s" % (e, e.read())
変更(PUT)を行うことを私はこのコードを使用:
をdef put_resource(url, xml, username=None, password=None):
try:
if username and password:
str = "%s:%s" % (username, password)
b64 = str.encode('base64')
request = urllib2.Request(url=url, data=xml)
request.add_header(key='content-type', val='application/xml')
request.add_header(key='Authorization', val='Basic %s' % b64)
request.get_method = lambda: 'PUT'
response = opener.open(request)
print_response(response)
except HTTPError, e:
print "Error: %s\n%s" % (e, e.read())
問題:
私はPOSTのデータがすべてうまくいく。しかし、私はPUTと、リソースに変更を加えるしようとしたとき、私は唯一の電子メールアドレスの変更、およびXMLパーサが戻ると同じXML送る:
insert unclosed token: line 14, column 4
を私はどのようにさっぱりだが同様のXMLはPUTの場合には解析エラーの原因となり、POSTの場合には発生しません。どんな提案も歓迎です!
詳細を助けることができるおかげで
EDIT ... 私はサービス実装へのアクセスをした、と解析は次のように構成されます。
私はデバッグfrom xml.etree.ElementTree import XML
try:
node_tree = XML(data.strip())
return self._parse_xml_node_to_dict(node_tree)
except ParseError, e:
、例外XMLコンストラクタがdata.strip()
引数で呼び出されたときにスローされます。 @thebjorn:xmlスキーマはありません
@mzjn: ありがとうございました!だから私はそれが起こる場所を追跡しなければならないが、data
の内容はどこかで切り捨てられる。ここでは、コンテンツです:
<?xml version="1.0" encoding="utf-8" ?>
<quser xmlns="http://user" xmlns:atom="http://www.w3.org/2005/atom">
<username>victorinox2</username>
<password>42b564oq</password>
<first_name></first_name>
<last_name></last_name>
<email>[email protected]</email>
<degree></degree>
<institution></institution>
<fields>
<role>reader</role>
</fields>
<research_areas></research_areas>
</quse
私はジャンゴを使用して、request.raw_post_dataが既に切り捨てられたデータが含まれているようです。しかし、私はxml
コンテンツが切り捨てられないurllib2.Request(url=url, data=xml)
でデータを... STEとき
HTTP PUTのurllib2の代わりにRequestsパッケージを試してみるとよいでしょう。http://stackoverflow.com/questions/111945/is-there-any-way-to-do-http-put -in-python –
'data'変数の内容を表示できますか? – mzjn