使用python-oauth2进行文件上传

4 投票
2 回答
2256 浏览
提问于 2025-04-16 22:47

发起一个GET请求其实很简单:

def build_request(url, method='GET'):
    params = {                                            
        'oauth_version': "1.0",
        'oauth_nonce': oauth2.generate_nonce(),
        'oauth_timestamp': int(time.time())
    }
    consumer = oauth2.Consumer(key='****',secret='******')
    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

但是现在,我们想要用一个文件来做POST请求。(我们使用的是python-oauth2这个库)。有什么建议吗?

2 个回答

1

从源代码来看,Request 需要一个方法来指定使用哪个 HTTP 请求。

你只需要把你的 req 改成

req = oauth2.Request(method='POST', url=url, parameters=params)

https://github.com/simplegeo/python-oauth2/blob/master/oauth2/init.py#L342 了解更多信息

这样可能会部分解决你的问题,至于文件上传,你可能需要通过提供带有内容的头信息来处理,具体可以参考:

https://github.com/simplegeo/python-oauth2/blob/master/oauth2/init.py#L646

抱歉,我还没有机会测试这个。

4

这个问题是因为oauth不应该对multipart/post数据进行签名,但它还是需要对其他参数进行签名。我解决这个问题的方法是使用python-oauth2来对非文件参数进行签名,然后用urllib2手动发送请求。

这里有一个示例脚本。可以查看第126到173行。

撰写回答