Hi,
Thanks for the quick reply Matt. Below is a recap of the setup with a
bit more clarity as well as the keys, url, and pre-encoded data.
Hopefully this sheds some light on the issue. I also tried the PHP lib
someone recommended with the same results - i.e 401 error. So again, I
am thinking it is something external to the Django setup - be it on
either end of the requests.
Thanks again!
Blaine
----
1. Url I am trying to call the twitter API:
http://articulture.blainegarrett.com/signin/
2. View Code being called:
[python_code]
def signin(request):
from acsite.people import oauthtwitter
import acsite.settings as settings
# Step 1: Create an anonymous twitter oauth consumer
oauth_consumer = oauthtwitter.OAuthApi('Vx43QEmSCP1whLq1OSPg',
'MY_SECRET_KEY') # Blaine's Personal Dev Site keys
# Step 2: Fetch Request Token From Twitter
request_token = oauth_consumer.getRequestToken() # In here I get
the 401 error
raise Exception(request_token) # Never gets here
[/python_code]
3: I installed fresh copies:
python-twitter :
http://code.google.com/p/python-twitter/
oauth-python-twitter :
http://code.google.com/p/oauth-python-twitter/
oauth :
http://oauth.googlecode.com/svn/code/python/oauth/oauth.py
In the oauth.py, I changed the line 36:
SIGNATURE_METHOD = 'HMAC-SHA1'
4. With no other changes, I get: the urllib2 exception: HTTPError at /
signin/ "HTTP Error 401: Unauthorized"
5. When I wrap the url opener code in oauthtwitter.py on approx line
102 in:
try:
url_data = opener.open(url).read()
except urllib2.HTTPError, e:
raise Exception('GET REQUEST VERSION : Unable to connect to the
oAuth Service. Code: %s - Url: %s : Content - %s' % (e.code, e.url,
e.msg))
I get the exception:
GET REQUEST VERSION: Unable to connect to the oAuth Service. Code:
401 - Url:
https://twitter.com/oauth/request_token?oauth_nonce=51064775&oauth_timestamp=1247173406&oauth_consumer_key=Vx43QEmSCP1whLq1OSPg&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_signature=4RiqJL0ZpHux77GKZku9FVeyhA8%3D
: Content - Unauthorized
6. Trying again with a new request, adding an exception of the key,raw
returned from build_signature_base_string in build_signature in
oauth.py line 563, I get:
key="MY_SECRET_KEY&", "raw: GET&https%3A%2F%2Ftwitter.com%2Foauth
%2Frequest_token&oauth_consumer_key%3DVx43QEmSCP1whLq1OSPg
%26oauth_nonce%3D59181510%26oauth_signature_method%3DHMAC-
SHA1%26oauth_timestamp%3D1247173659%26oauth_version%3D1.0"
Note trailing ampersand on the key returned. Could this be a query
string artifact?
On Jul 6, 10:59 am, Matt Sanford <
m...@twitter.com> wrote:
> Hi Blaine,
>
> Failing the validate the signature when getting a request token
> is pretty rare. As you said the fact this all works from other
> libraries seems to point to a library issue. The most helpful things
> to see in these cases are:
>
> • The actual HTTP request and response that fails. By seeing the URL
> requested I can try and recreate the signature and find the mismatch.
> • The "signature base string" used to create the oauth_signature
> parameter. This usually requires adding some print statements to the
> oauth library you're using but can be really helpful.
>
> If you can send the HTTP request and response (headers and
> bodies) that will be a good start. If you're not sure how to get them
> from your library I recommend using a debugging proxy like Charles [1].
>
> Thanks;
> – Matt Sanford / @mzsanford
> Twitter Dev
>
> [1] -
http://www.charlesproxy.com/
>
> On Jul 3, 2009, at 2:10 PM, Blaine Garrett wrote:
>
>
>
> > Hi,
>
> > I get the 401:Unauthorized Error every time I attempt to get a request
> > token. When I attempt to go to the URL directly in the browser (not
> > yet accessed to preserve nonce) I get a body of "Failed to validate
> > oauth signature and token".
>
> > I am using the Leah's oauth client listed athttp://
oauth.net/code