3

Python から http PUT 操作を実行する必要があります。これをサポートすることが証明されているライブラリはどれですか? より具体的には、ファイルのアップロードではなく、キーペアで PUT を実行する必要があります。

restful_lib.py を使用しようとしていますが、テストしている API から無効な結果が得られます。(コマンド ラインから curl を使用して同じ要求を発行でき、それが機能するため、結果が無効であることはわかっています。)

Pycon 2011 に参加した後、私は pycurl が私の解決策になるかもしれないという印象を持ったので、それを実装しようとしてきました。ここで 2 つの問題があります。まず、pycurl は「PUT」の名前を「UPLOAD」に変更しました。これは、鍵ペアではなくファイルのアップロードに重点を置いていることを暗示しているようです。第二に、それを使用しようとすると、.perform() ステップから返されないようです。

これが私の現在のコードです:

import pycurl
import urllib
url='https://xxxxxx.com/xxx-rest'
UAM=pycurl.Curl()

def on_receive(data):
  print data

arglist= [\
    ('username', 'testEmailAdd@test.com'),\
    ('email', 'testEmailAdd@test.com'),\
    ('username','testUserName'),\
    ('givenName','testFirstName'),\
    ('surname','testLastName')]
encodedarg=urllib.urlencode(arglist)
path2= url+"/user/"+"99b47002-56e5-4fe2-9802-9a760c9fb966"
UAM.setopt(pycurl.URL, path2)
UAM.setopt(pycurl.POSTFIELDS, encodedarg)
UAM.setopt(pycurl.SSL_VERIFYPEER, 0)
UAM.setopt(pycurl.UPLOAD, 1) #Set to "PUT"
UAM.setopt(pycurl.CONNECTTIMEOUT, 1) 
UAM.setopt(pycurl.TIMEOUT, 2) 
UAM.setopt(pycurl.WRITEFUNCTION, on_receive)
print "about to perform"
print UAM.perform()
4

3 に答える 3

3

httplib で管理する必要があります。

http://docs.python.org/library/httplib.html

このページに例がありますhttp://effbot.org/librarybook/httplib.htm

于 2011-03-16T13:25:34.380 に答える
2

urlliburllib2も推奨されます。

于 2011-03-16T13:30:25.623 に答える
0

皆様のご協力に感謝いたします。私は答えを見つけたと思います。

私のコードは次のようになります。

import urllib
import httplib
import lxml
from lxml import etree
url='xxxx.com'
UAM=httplib.HTTPSConnection(url)

arglist= [\
    ('username', 'testEmailAdd@test.com'),\
    ('email', 'testEmailAdd@test.com'),\
    ('username','testUserName'),\
    ('givenName','testFirstName'),\
    ('surname','testLastName')\
    ]
encodedarg=urllib.urlencode(arglist)

uuid="99b47002-56e5-4fe2-9802-9a760c9fb966"
path= "/uam-rest/user/"+uuid
UAM.putrequest("PUT", path)
UAM.putheader('content-type','application/x-www-form-urlencoded')
UAM.putheader('accepts','application/com.internap.ca.uam.ama-v1+xml')
UAM.putheader("Content-Length", str(len(encodedarg)))
UAM.endheaders()
UAM.send(encodedarg)
response = UAM.getresponse()
html = etree.HTML(response.read())
result = etree.tostring(html, pretty_print=True, method="html")
print result

更新:有効な応答を取得しています。これが私の解決策のようです。(最後のきれいな印刷は機能していませんが、私は本当に気にしません。それは私が関数を構築している間だけそこにあります。)

于 2011-03-16T15:34:07.303 に答える