Reputation: 1308
Ok,
I've muddled through the OAuth for Twitter and am nearly done. Basically, I'm unable to post a tweet on behalf of a user through a webapp. To the best of my knowledge the webapp is configured properly through the twitter web gui.
I'm doing 3-legged authorization so a user can sign into twitter and authorize my app: https://dev.twitter.com/docs/auth/3-legged-authorization.
This seems to be working, I'm redirecting, signing in and authorizing my app. The bothersome bit however is that on authorization, one of the messages twitter says is that my app cant post tweets on behalf of the user. I'm pretty sure this is what I need to do and what I was under the impression all this authorization was for. Here's the copy/pasted message from the twitter redirect found at https://api.twitter.com/oauth/authorize:
This application will not be able to:
Follow new people.
Update your profile.
Post Tweets for you.
Access your direct messages.
See your Twitter password.
Anyway, this gives me a oauth_verifier, I then use the verifier to get oauth_token and oauth_token_secret so that I can properly sign the request for the final call to update.json. Which ultimately fails.
I'm using the same methods to sign and send the other requests so I'm fairly confident in the code thus far. Like I said, that message in authorization leads me to believe I'm following the wrong flow.
Any ideas, on where I'm going wrong?
For completeness, here's the complete http log for the entire flow, from request token to the final update.json call:
CookieSpec selected: best-match
Auth cache not set in the context
Connection request: [route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
Connection leased: [id: 3][route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
Opening connection {s}->//api.twitter.com:443
Connecting to api.twitter.com/199.16.156.231:443
Connection established 192.168.0.149:40378<->xxx.xxx.xxx
Executing request POST /oauth/request_token HTTP/1.1
Proxy auth state: UNCHALLENGED
http-outgoing-3 >> POST /oauth/request_token HTTP/1.1
http-outgoing-3 >> Authorization: OAuth oauth_callback="http%3A%2F%2Flocalhost%3A8080%2Ftwitter%2Fmanager%2F%3Faction%3Dsend%26guid%3D6e3dc68deeeae665e8d723a4f9cbf542", oauth_signature="vC9M476C%2FQW9kYvNZ9xql%2FLyZCA%3D", oauth_version="1.0", oauth_nonce="USXiSoKlNYQS8NTcbCCA3bnnFXYRd9kfBJVjSB6Q", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxx", oauth_timestamp="1400189104"
http-outgoing-3 >> Content-Length: 0
http-outgoing-3 >> Host: api.twitter.com
http-outgoing-3 >> Connection: Keep-Alive
http-outgoing-3 >> User-Agent: Apache-HttpClient/4.3.3 (java 1.5)
http-outgoing-3 >> Accept-Encoding: gzip,deflate
http-outgoing-3 >> "POST /oauth/request_token HTTP/1.1[\r][\n]"
http-outgoing-3 >> "Authorization: OAuth oauth_callback="http%3A%2F%2Flocalhost%3A8080%2Ftwitter%2Fmanager%2F%3Faction%3Dsend%26guid%3D6e3dc68deeeae665e8d723a4f9cbf542", oauth_signature="vC9M476C%2FQW9kYvNZ9xql%2FLyZCA%3D", oauth_version="1.0", oauth_nonce="USXiSoKlNYQS8NTcbCCA3bnnFXYRd9kfBJVjSB6Q", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxxx", oauth_timestamp="1400189104"[\r][\n]"
http-outgoing-3 >> "Content-Length: 0[\r][\n]"
http-outgoing-3 >> "Host: api.twitter.com[\r][\n]"
http-outgoing-3 >> "Connection: Keep-Alive[\r][\n]"
http-outgoing-3 >> "User-Agent: Apache-HttpClient/4.3.3 (java 1.5)[\r][\n]"
http-outgoing-3 >> "Accept-Encoding: gzip,deflate[\r][\n]"
http-outgoing-3 >> "[\r][\n]"
http-outgoing-3 << "HTTP/1.1 200 OK[\r][\n]"
http-outgoing-3 << "cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0[\r][\n]"
http-outgoing-3 << "content-encoding: gzip[\r][\n]"
http-outgoing-3 << "content-length: 151[\r][\n]"
http-outgoing-3 << "content-type: text/html; charset=utf-8[\r][\n]"
http-outgoing-3 << "date: Thu, 15 May 2014 21:25:05 GMT[\r][\n]"
http-outgoing-3 << "etag: "0b6ca0aabfd76584ae993fe40ebcfdcc"[\r][\n]"
http-outgoing-3 << "expires: Tue, 31 Mar 1981 05:00:00 GMT[\r][\n]"
http-outgoing-3 << "last-modified: Thu, 15 May 2014 21:25:05 GMT[\r][\n]"
http-outgoing-3 << "pragma: no-cache[\r][\n]"
http-outgoing-3 << "server: tfe[\r][\n]"
http-outgoing-3 << "set-cookie: _twitter_sess=BAh7BzoHaWQiJTg5NmM2MzVhY2JjNmU1NjBkNzQ5NTU2N2FiNTU1MzAwOg9j%250AcmVhdGVkX2F0bCsIJjTGAUYB--e8e44591c617a763b2bc7f5d3ae817f70711a4af; domain=.twitter.com; path=/; secure; HttpOnly[\r][\n]"
http-outgoing-3 << "set-cookie: guest_id=v1%3A140018910503922354; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:05 UTC[\r][\n]"
http-outgoing-3 << "status: 200 OK[\r][\n]"
http-outgoing-3 << "strict-transport-security: max-age=631138519[\r][\n]"
http-outgoing-3 << "vary: Accept-Encoding[\r][\n]"
http-outgoing-3 << "x-content-type-options: nosniff[\r][\n]"
http-outgoing-3 << "x-frame-options: SAMEORIGIN[\r][\n]"
http-outgoing-3 << "x-mid: 3b00d392f6b00a23254fdf48f24fcab9d8e0664b[\r][\n]"
http-outgoing-3 << "x-runtime: 0.01600[\r][\n]"
http-outgoing-3 << "x-tfe-logging-request-category: API[\r][\n]"
http-outgoing-3 << "x-transaction: 185cee6c20cefe6a[\r][\n]"
http-outgoing-3 << "x-ua-compatible: IE=edge,chrome=1[\r][\n]"
http-outgoing-3 << "x-xss-protection: 1; mode=block[\r][\n]"
http-outgoing-3 << "[\r][\n]"
http-outgoing-3 << HTTP/1.1 200 OK
http-outgoing-3 << cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
http-outgoing-3 << content-encoding: gzip
http-outgoing-3 << content-length: 151
http-outgoing-3 << content-type: text/html; charset=utf-8
http-outgoing-3 << date: Thu, 15 May 2014 21:25:05 GMT
http-outgoing-3 << etag: "0b6ca0aabfd76584ae993fe40ebcfdcc"
http-outgoing-3 << expires: Tue, 31 Mar 1981 05:00:00 GMT
http-outgoing-3 << last-modified: Thu, 15 May 2014 21:25:05 GMT
http-outgoing-3 << pragma: no-cache
http-outgoing-3 << server: tfe
http-outgoing-3 << set-cookie: _twitter_sess=BAh7BzoHaWQiJTg5NmM2MzVhY2JjNmU1NjBkNzQ5NTU2N2FiNTU1MzAwOg9j%250AcmVhdGVkX2F0bCsIJjTGAUYB--e8e44591c617a763b2bc7f5d3ae817f70711a4af; domain=.twitter.com; path=/; secure; HttpOnly
http-outgoing-3 << set-cookie: guest_id=v1%3A140018910503922354; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:05 UTC
http-outgoing-3 << status: 200 OK
http-outgoing-3 << strict-transport-security: max-age=631138519
http-outgoing-3 << vary: Accept-Encoding
http-outgoing-3 << x-content-type-options: nosniff
http-outgoing-3 << x-frame-options: SAMEORIGIN
http-outgoing-3 << x-mid: 3b00d392f6b00a23254fdf48f24fcab9d8e0664b
http-outgoing-3 << x-runtime: 0.01600
http-outgoing-3 << x-tfe-logging-request-category: API
http-outgoing-3 << x-transaction: 185cee6c20cefe6a
http-outgoing-3 << x-ua-compatible: IE=edge,chrome=1
http-outgoing-3 << x-xss-protection: 1; mode=block
Connection can be kept alive indefinitely
Cookie accepted [_twitter_sess="BAh7BzoHaWQiJTg5NmM2MzVhY2JjNmU1NjBkNzQ5NTU2N2FiNTU1MzAwOg9j%250AcmVhdGVkX2F0bCsIJjTGAUYB--e8e44591c...", version:0, domain:.twitter.com, path:/, expiry:null]
Cookie accepted [guest_id="v1%3A140018910503922354", version:0, domain:.twitter.com, path:/, expiry:Sat May 14 14:25:05 PDT 2016]
http-outgoing-3 << "[0x1f][0x8b][0x8][0x0][0x0][0x0][0x0][0x0][0x0][0x3]E[0xcb][0xbb][0xe][0x82]0[0x14][0x0][0xd0][0xbf]q[0xb6][0xd2][0x0]K[0x87]Fc[0x8a]&[0xbc]b[0x82][0xb2][0x90]>.[0xa2][0x94][0x16]K[0x11][0xf9]{[0x17][0x13][0xcf]~,[0x9f]}[0xd7]x[0xdb][0x83]!z8[0xfa][0x13]^i[0xbd][0xa5][0xb4][0xcb]G[0x9c][0x8d]Q[0xc0][0xcb]wq)[0xd8][0x12]X[0xc8][0xd6][0xb9]R"[0x80][\n]"
http-outgoing-3 << "[0x96][0x8d][0xfd][0xb7]f[0x2][0xe9][0xc0][0x93][0xda]|T[0x8a]Pt[0xa6][0xe1][0x92][0xe4]7q[0xf][0xcd][0xcb]$[\n]"
http-outgoing-3 << "[0xb5],[0x8d][0xcb]qw[0x98][0xf6][0xc0][0xd4][0x15][0xc7][0xe8]Y[0xfc][0xba][0xe4]Z[0xb].[0xfb]FZ[0xd3]>[0xdc][0x0][0x8a]x7[0xc3][0x17][0x9a]hY[0x91][0x93][0x0][0x0][0x0]"
CookieSpec selected: best-match
Auth cache not set in the context
Connection request: [route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
Connection leased: [id: 4][route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
Opening connection {s}->//api.twitter.com:443
Connecting to api.twitter.com/199.16.156.231:443
Connection established 192.168.0.149:40384<->xxx.xxx.xxx
Executing request POST /oauth/access_token HTTP/1.1
Proxy auth state: UNCHALLENGED
http-outgoing-4 >> POST /oauth/access_token HTTP/1.1
http-outgoing-4 >> Authorization: OAuth oauth_signature="TD1ygCGhYe50EYpqZt59IdVj7M4%3D", oauth_version="1.0", oauth_nonce="9vxojbiKhddmVa6HQ4fPCwuxR34GJQA4rDoZ9bjQ4", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxxx", oauth_token="xxxxxxxxx", oauth_timestamp="1400189107"
http-outgoing-4 >> Content-Type: application/x-www-form-urlencoded
http-outgoing-4 >> Content-Length: 58
http-outgoing-4 >> Host: api.twitter.com
http-outgoing-4 >> Connection: Keep-Alive
http-outgoing-4 >> User-Agent: Apache-HttpClient/4.3.3 (java 1.5)
http-outgoing-4 >> Accept-Encoding: gzip,deflate
http-outgoing-4 >> "POST /oauth/access_token HTTP/1.1[\r][\n]"
http-outgoing-4 >> "Authorization: OAuth oauth_signature="TD1ygCGhYe50EYpqZt59IdVj7M4%3D", oauth_version="1.0", oauth_nonce="9vxojbiKhddmVa6HQ4fPCwuxR34GJQA4rDoZ9bjQ4", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxxx", oauth_token="xxxxxxxx", oauth_timestamp="1400189107"[\r][\n]"
http-outgoing-4 >> "Content-Type: application/x-www-form-urlencoded[\r][\n]"
http-outgoing-4 >> "Content-Length: 58[\r][\n]"
http-outgoing-4 >> "Host: api.twitter.com[\r][\n]"
http-outgoing-4 >> "Connection: Keep-Alive[\r][\n]"
http-outgoing-4 >> "User-Agent: Apache-HttpClient/4.3.3 (java 1.5)[\r][\n]"
http-outgoing-4 >> "Accept-Encoding: gzip,deflate[\r][\n]"
http-outgoing-4 >> "[\r][\n]"
http-outgoing-4 >> "oauth_verifier=EiKvjzZoJs8wpPPYAH9HfH4AzaJww9rpPaVaGNTfIGU"
http-outgoing-4 << "HTTP/1.1 200 OK[\r][\n]"
http-outgoing-4 << "cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0[\r][\n]"
http-outgoing-4 << "content-encoding: gzip[\r][\n]"
http-outgoing-4 << "content-length: 162[\r][\n]"
http-outgoing-4 << "content-type: text/html; charset=utf-8[\r][\n]"
http-outgoing-4 << "date: Thu, 15 May 2014 21:25:08 GMT[\r][\n]"
http-outgoing-4 << "etag: "fbc884be17092a347f2448c9930d49fc"[\r][\n]"
http-outgoing-4 << "expires: Tue, 31 Mar 1981 05:00:00 GMT[\r][\n]"
http-outgoing-4 << "last-modified: Thu, 15 May 2014 21:25:08 GMT[\r][\n]"
http-outgoing-4 << "pragma: no-cache[\r][\n]"
http-outgoing-4 << "server: tfe[\r][\n]"
http-outgoing-4 << "set-cookie: _twitter_sess=BAh7BzoHaWQiJWU5OTQxMDBlZjY3NWFkYjJkOGU2MzgyODliMzAyNTU0Og9j%250AcmVhdGVkX2F0bCsIOkDGAUYB--6b849fed6321e3fa6e4ab893390a6d28a399d3db; domain=.twitter.com; path=/; secure; HttpOnly[\r][\n]"
http-outgoing-4 << "set-cookie: guest_id=v1%3A140018910816287961; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:08 UTC[\r][\n]"
http-outgoing-4 << "status: 200 OK[\r][\n]"
http-outgoing-4 << "strict-transport-security: max-age=631138519[\r][\n]"
http-outgoing-4 << "vary: Accept-Encoding[\r][\n]"
http-outgoing-4 << "x-content-type-options: nosniff[\r][\n]"
http-outgoing-4 << "x-frame-options: SAMEORIGIN[\r][\n]"
http-outgoing-4 << "x-mid: 401f4314b40a26378b545aa69dbbff8243de8a7b[\r][\n]"
http-outgoing-4 << "x-runtime: 0.03767[\r][\n]"
http-outgoing-4 << "x-tfe-logging-request-category: API[\r][\n]"
http-outgoing-4 << "x-transaction: a136a000eb66d6df[\r][\n]"
http-outgoing-4 << "x-ua-compatible: IE=edge,chrome=1[\r][\n]"
http-outgoing-4 << "x-xss-protection: 1; mode=block[\r][\n]"
http-outgoing-4 << "[\r][\n]"
http-outgoing-4 << HTTP/1.1 200 OK
http-outgoing-4 << cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
http-outgoing-4 << content-encoding: gzip
http-outgoing-4 << content-length: 162
http-outgoing-4 << content-type: text/html; charset=utf-8
http-outgoing-4 << date: Thu, 15 May 2014 21:25:08 GMT
http-outgoing-4 << etag: "fbc884be17092a347f2448c9930d49fc"
http-outgoing-4 << expires: Tue, 31 Mar 1981 05:00:00 GMT
http-outgoing-4 << last-modified: Thu, 15 May 2014 21:25:08 GMT
http-outgoing-4 << pragma: no-cache
http-outgoing-4 << server: tfe
http-outgoing-4 << set-cookie: _twitter_sess=BAh7BzoHaWQiJWU5OTQxMDBlZjY3NWFkYjJkOGU2MzgyODliMzAyNTU0Og9j%250AcmVhdGVkX2F0bCsIOkDGAUYB--6b849fed6321e3fa6e4ab893390a6d28a399d3db; domain=.twitter.com; path=/; secure; HttpOnly
http-outgoing-4 << set-cookie: guest_id=v1%3A140018910816287961; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:08 UTC
http-outgoing-4 << status: 200 OK
http-outgoing-4 << strict-transport-security: max-age=631138519
http-outgoing-4 << vary: Accept-Encoding
http-outgoing-4 << x-content-type-options: nosniff
http-outgoing-4 << x-frame-options: SAMEORIGIN
http-outgoing-4 << x-mid: 401f4314b40a26378b545aa69dbbff8243de8a7b
http-outgoing-4 << x-runtime: 0.03767
http-outgoing-4 << x-tfe-logging-request-category: API
http-outgoing-4 << x-transaction: a136a000eb66d6df
http-outgoing-4 << x-ua-compatible: IE=edge,chrome=1
http-outgoing-4 << x-xss-protection: 1; mode=block
Connection can be kept alive indefinitely
Cookie accepted [_twitter_sess="BAh7BzoHaWQiJWU5OTQxMDBlZjY3NWFkYjJkOGU2MzgyODliMzAyNTU0Og9j%250AcmVhdGVkX2F0bCsIOkDGAUYB--6b849fed6...", version:0, domain:.twitter.com, path:/, expiry:null]
Cookie accepted [guest_id="v1%3A140018910816287961", version:0, domain:.twitter.com, path:/, expiry:Sat May 14 14:25:08 PDT 2016]
http-outgoing-4 << "[0x1f][0x8b][0x8][0x0][0x0][0x0][0x0][0x0][0x0][0x3]E[0xcd]K[0xe][0x82]0[0x14]@[0xd1][0xdd]03i[0xc5]V[0x19]00[0xf2]I[0x83][0x89]h[0xd4][0xc0][0xa8]AxR [0x94]H?[0xd6][0xdd][0xcb][0x8c][0x5][0xdc]s[0xa7][0xca]h[0xc1][0xf5]4[0x80][0xc])&[0x4][0x91][0x0][0xa3]MAO[0xc7][0xf8][0xde]E[0xfa][0xd1][0xfa]Y~[0xc1][0xcf][0x83][0xaf]#[0xd7]C&[0xbe]I[0x9d]'F1im[0x9b]hoZs[0xae][0xa0][0x9e]A[0x87][0xfd][0xcd][0xa6][0xc3]gK[\n]"
http-outgoing-4 << "@;[0x14][0xfc] [0x8e][0xd1]u.[0xf1][0x99][0x16][0xe5][0x9b][0x8d][0x4][0x9]G[0xf7][0x9d]u[0xa9][0xc9][0x98][0xeb]=[0xa3]`[0xe6]][0xb3][0xbe]=[0xb5]([0x8b]&[0xab][0x11][0xc2][0xc6][0x88][0x97][0x11[0x8c]?[0x15][0xca][0xa4][0x0][0x0][0x0]"
CookieSpec selected: best-match
Auth cache not set in the context
Connection request: [route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
Connection leased: [id: 5][route: {s}->//api.twitter.com:443][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
Opening connection {s}->//api.twitter.com:443
Connecting to api.twitter.com/199.16.156.231:443
Connection established 192.168.0.149:40386<->xxx.xxx.xxx
Executing request POST /1/statuses/update.json?include_entities=true HTTP/1.1
Proxy auth state: UNCHALLENGED
http-outgoing-5 >> POST /1/statuses/update.json?include_entities=true HTTP/1.1
http-outgoing-5 >> Authorization: OAuth oauth_signature="tqWPdEKoZ7WJjP46O3m%2FHX8x%2FkU%3D", oauth_version="1.0", oauth_nonce="fyf8gNTKRcb40A2VfiFzdoxtAbH1jvvWoTX1LBXU12E", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxxx", oauth_token="xxxxxxxx", oauth_timestamp="1400189108"
http-outgoing-5 >> Accept: /
http-outgoing-5 >> Connection: close
http-outgoing-5 >> Content-Type: application/x-www-form-urlencoded
http-outgoing-5 >> Content-Length: 20
http-outgoing-5 >> Host: api.twitter.com
http-outgoing-5 >> User-Agent: Apache-HttpClient/4.3.3 (java 1.5)
http-outgoing-5 >> Accept-Encoding: gzip,deflate
http-outgoing-5 >> "POST /1/statuses/update.json?include_entities=true HTTP/1.1[\r][\n]"
http-outgoing-5 >> "Authorization: OAuth oauth_signature="tqWPdEKoZ7WJjP46O3m%2FHX8x%2FkU%3D", oauth_version="1.0", oauth_nonce="fyf8gNTKRcb40A2VfiFzdoxtAbH1jvvWoTX1LBXU12E", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="xxxxxxxxx", oauth_token="xxxxxxx", oauth_timestamp="1400189108"[\r][\n]"
http-outgoing-5 >> "Accept: /[\r][\n]"
http-outgoing-5 >> "Connection: close[\r][\n]"
http-outgoing-5 >> "Content-Type: application/x-www-form-urlencoded[\r][\n]"
http-outgoing-5 >> "Content-Length: 20[\r][\n]"
http-outgoing-5 >> "Host: api.twitter.com[\r][\n]"
http-outgoing-5 >> "User-Agent: Apache-HttpClient/4.3.3 (java 1.5)[\r][\n]"
http-outgoing-5 >> "Accept-Encoding: gzip,deflate[\r][\n]"
http-outgoing-5 >> "[\r][\n]"
http-outgoing-5 >> "status=tweet+testing"
http-outgoing-5 << "HTTP/1.1 401 Unauthorized[\r][\n]"
http-outgoing-5 << "content-encoding: gzip[\r][\n]"
http-outgoing-5 << "content-length: 88[\r][\n]"
http-outgoing-5 << "content-type: application/json; charset=utf-8[\r][\n]"
http-outgoing-5 << "date: Thu, 15 May 2014 21:25:08 UTC[\r][\n]"
http-outgoing-5 << "server: tfe[\r][\n]"
http-outgoing-5 << "set-cookie: guest_id=v1%3A140018910877288554; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:08 UTC[\r][\n]"
http-outgoing-5 << "strict-transport-security: max-age=631138519[\r][\n]"
http-outgoing-5 << "x-tfe-logging-request-category: API[\r][\n]"
http-outgoing-5 << "Connection: close[\r][\n]"
http-outgoing-5 << "[\r][\n]"
http-outgoing-5 << HTTP/1.1 401 Unauthorized
http-outgoing-5 << content-encoding: gzip
http-outgoing-5 << content-length: 88
http-outgoing-5 << content-type: application/json; charset=utf-8
http-outgoing-5 << date: Thu, 15 May 2014 21:25:08 UTC
http-outgoing-5 << server: tfe
http-outgoing-5 << set-cookie: guest_id=v1%3A140018910877288554; Domain=.twitter.com; Path=/; Expires=Sat, 14-May-2016 21:25:08 UTC
http-outgoing-5 << strict-transport-security: max-age=631138519
http-outgoing-5 << x-tfe-logging-request-category: API
http-outgoing-5 << Connection: close
Authentication required
api.twitter.com:443 requested authentication
Response contains no authentication challenges
Cookie accepted [guest_id="v1%3A140018910877288554", version:0, domain:.twitter.com, path:/, expiry:Sat May 14 14:25:08 PDT 2016]
Twitter responded with 401, expected 200
Upvotes: 1
Views: 828
Reputation: 1308
I solved my problem. I'm going to post here in the off chance someone finds it useful.
the body has one parameter, status. the body then looks like:
status=A%20message
When generating the signature, the encoded body needs to be passed to the signature to be encoded again.
Upvotes: 1