我在python中使用2腿式oauth2有一个有效的GET。这是 WORKING GET代码:
进口:
import oauth2
import urllib #for url-encode
import urllib2 #for getting and receiving data from server
import time #Unix timestamp import oauth2
电话:
resourceUrl = "https://test.mysite:8443/ess/scheduleapi/v1/people"
request = build_request(resourceUrl,'GET')
u = urllib2.urlopen(request.to_url())
people_data = u.read()
生成请求的功能:
def build_request(url, method):
params = {
'oauth_version': "1.0",
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': int(time.time())
}
consumer = oauth2.Consumer(key='mykey',secret='mysecret')
params['oauth_consumer_key'] = consumer.key
req = oauth2.Request(method=method, url=url, parameters=params)
signature_method = oauth2.SignatureMethod_HMAC_SHA1()
req.sign_request(signature_method, consumer, None)
return req
#end build_request
因此,我认为我可以复制我认为需要的GET部分,然后将其与我从一些urllib2文档中获得的语法结合起来,并编写出有效的POST。不是这样
请记住,我具有相同的导入和相同的build_request函数。这是 断的 POST代码。请指教!
电话:
myurl = "https://test.mysite:8443/ess/scheduleapi/v1/people"
myaction = 'POST'
myxml = somexmlIalreadygenerated
person_added, err = post_or_put_me(myaction,myxml,myurl)
POST的功能:
def post_or_put_me(action,xml,url)
request = build_request(url,action) # use same header-generating code as GET did?
post_data = urllib.urlencode(xml)
req = urllib2.Request(request,post_data)
try:
u = urllib2.urlopen(req)
post_or_put_returned_data = u.read()
print 'LENGTH :', len(post_or_put_returned_data)
print 'DATA :', post_or_put_returned_data
except urllib2.HTTPError, e:
server_error = 'HTTPError = ' + str(e.code)
except urllib2.URLError, e:
server_error = 'URLError = ' + str(e.reason)
except httplib.HTTPException, e:
server_error = 'HTTPException'
except Exception:
import traceback
server_error = 'generic exception: ' + traceback.format_exc()
#endtry
if server_error:
err_msg = server_error
else:
succ_msg = 'you had a successful post or put'
#endif
return succ_msg, err_msg
#end post_or_put_me
这是我的第二次尝试:
def post_or_put_me(action,xml,url):
myrequest = build_request(url,'POST')
CONSUMER_KEY = 'admin_access'
CONSUMER_SECRET = 'xxxxxxxxxx'
consumer = oauth2.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
token = oauth2.Token(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
client = oauth2.Client(consumer, token)
resp, content = client.request(
url,
method=action,
body=urllib.urlencode(str(xml)),
headers= myrequest.headers,
force_auth_header=True,
)
print 'resp, content are', resp, content
这是我如何使POST或PUT正常工作的实际工作代码,由Echo360 Lecture Capture的Wes
Barnes提供。我不希望其他人做2腿oauth POST / PUT来重新发明轮子。
import oauth2 as oauth
import time
import urllib2 as urllib
echo_base_url = 'http://pilot.echo360.com/ess/scheduleapi/v1'
consumer = oauth.Consumer(key ='xxxxx', secret='xxxx')
client = oauth.Client(consumer)
params = "<person><first-name>Jon</first-name><last-name>Doe</last-name><title>Super Hero</title><email-address>jdoe17@echo360.com</email-address><block-alerts>false</block-alerts><time-zone>US/Eastern</time-zone><locale>en_US</locale><credentials><user-name>jdoe17@echo360.com</user-name><password>password</password></credentials><organization-roles><organization-role><organization-id>b1973c39-dc76-4cab-a4aa-3f9efd628df2</organization-id><role>role-name-admin</role></organization-role></organization-roles></person>"
resp, content = client.request(
echo_base_url + "/people/",
method = "PUT",
body=params,
headers={'Content-type': 'application/xml'}
#force_auth_header=True
)
print resp, content
如何在Python中用请求发送?如何发送文件,我明白了,但是如何用这种方法发送表单数据就不明白了。
有人知道使用发布JSON的正确方法吗? 我从服务器得到响应。它使用Chrome工作。
下面是我的代码片段: 为电子邮件创建消息。 args:发件人:发件人的电子邮件地址。 收件人:接收人的电子邮件地址。 主题:电子邮件的主题。 message_text:电子邮件的文本。 返回: 包含base64url编码的电子邮件对象的对象。 在gmail中添加附件“noname”的电子邮件
问题内容: 我在这里尝试做的是获取给定URL的标头,以便确定MIME类型。我希望能够查看是否http://somedomain/foo/将返回例如HTML文档或JPEG图像。因此,我需要弄清楚如何发送HEAD请求,以便无需下载内容就可以读取MIME类型。有人知道这样做的简单方法吗? 问题答案: 使用。 还有一个getheader(name)获取特定的标头。
我们正在使用OAuth2。0表示安全性。我在网上浏览了很多资源,每个人都在使用客户id、客户机密以及用户名和密码。但是我只想要client_id和client_secret,并且获得不带用户名和密码的访问令牌。 任何帮助将高度赞赏。
如何在Android中使用Twillio Api发送短信。这是我的代码。我不知道的是如何设置http请求正文。当我使用CocoaRestClient(用于api测试的工具)测试它时,它运行良好。请帮帮我。 }