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.
1. Url I am trying to call the twitter API:
2. View Code being called:
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
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
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,
I get the exception:
GET REQUEST VERSION: Unable to connect to the oAuth Service. Code:
401 - Url:
: 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
Note trailing ampersand on the key returned. Could this be a query
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 .
> – Matt Sanford / @mzsanford
> Twitter Dev
>  -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
> > as well as the python-twitter (0.7-devel) and oauth-python-twitter
> > (v0.1)
> > I was able to get these same libraries to work on a different project
> > but not on the current one I am working on.
> > I have refreshed my tokens numerous times and also tried the working
> > ones from the other project. I also tried the tokens from this project
> > on the other project that was working and that WORKED.
> > As such, I am guessing it is an issue with my setup or some other lib
> > I am working with.
> > Both projects however have Python Versions 2.5.2 and should otherwise
> > be the same setups.
> > Domain the project is on ishttp://articulture.blainegarrett.comif
> > the matters for some odd reason.
> > Any thoughts?
> > Here is the code I am using to call the libs if it helps:
> > oauth_consumer = oauthtwitter.OAuthApi(consumer_token,
> > consumer_secret)
> > request_token = oauth_consumer.getRequestToken() # httplib exception
> > bubbles from within here
> > authorization_url = oauth_consumer.getAuthorizationURL(request_token)
> > Thank you!
> > ~Blaine
> > --
> > Blaine Garrett
> > gchat : bla...@jrcorps.com
> > aim: zombiediv
> > y!: zombiediv