Как я могу отправить POST, используя 2-х ноги oauth2 в Python?

У меня есть рабочий GET с использованием 2-х ножного oauth2 в Python. ЗдесьЗА РАБОТОЙ Получить код:

импорт:

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

Ответы на вопрос(2)

Ваш ответ на вопрос