我试图按照我在stackoverflow上找到的示例,使用urllib2进行PUT到REST:
Is there any way to do HTTP PUT in python
我不明白为什么我会报错。
这是我的代码的摘录:
import urllib2
import json
content_header = {'Content-type':'application/json',
'Accept':'application/vnd.error+json,application/json',
'Accept-Version':'1.0'}
baseURL = "http://some/put/url/"
f = open("somefile","r")
data = json.loads(f.read())
request = urllib2.Request(url=baseURL, data=json.dumps(jsonObj), headers=content_header)
request.get_method = lambda: 'PUT' #if I remove this line then the POST works fine.
response = urllib2.urlopen(request)
print response.read()
如果我删除要设置的PUT选项,则它将发布找到的内容,但是当我尝试将get_method设置为PUT时,它将出错。
为确保REST服务不会引起问题,我尝试使用cURL进行PUT,并且工作正常。
最佳答案
尽管aaronfay的答案很好并且可行,但我认为,鉴于GET之外只有3种HTTP方法(并且您只担心PUT),为每个方法定义Request子类更加清晰和简单。
例如:
class PutRequest(urllib2.Request):
'''class to handling putting with urllib2'''
def get_method(self, *args, **kwargs):
return 'PUT'
然后使用:
request = PutRequest(url, data=json.dumps(data), headers=content_header)
关于python - 使用Python urllib2进行PUT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21243834/