Greetings,
I'm having a weird problem using my under-construction Ruby API library
to talk to Wikimedia wikis. Login to eg.
en.wikipedia.org seems to work
fine:
REQ: {"format"=>"xml", "lgpassword"=>"XXX",
"action"=>"login",
"lgdomain"=>"local", "lgname"=>"Jpatokal"}
RES: <api><login result='NeedToken' cookieprefix='enwiki'
token='b07fdd1582a3faeed6244b58577a2b19'
sessionid='e310ae7389c8364e7ff4ac2e91258e54'/></api>
REQ: {"format"=>"xml", "lgpassword"=>"XXX",
"action"=>"login",
"lgdomain"=>"local",
"lgtoken"=>"b07fdd1582a3faeed6244b58577a2b19",
"lgname"=>"Jpatokal"}
RES: <api><login result='Success' lguserid='8155'
cookieprefix='enwiki'
lgusername='Jpatokal' sessionid='e310ae7389c8364e7ff4ac2e91258e54'
lgtoken='3006f107e16173abcc8d9a2d46fbfea4'/></api>
I can request an edit token for a page and get back a seemingly suitable
one:
REQ: {"intoken"=>"edit", "format"=>"xml",
"action"=>"query",
"titles"=>"User:Jpatokal/Sandbox",
"prop"=>"info"}
RES: <api><query><pages><page
starttimestamp='2010-08-11T10:26:00Z'
pageid='26692065' touched='2010-04-23T04:55:02Z'
lastrevid='357765946'
title='User:Jpatokal/Sandbox'
edittoken='6069665f65933586ddfa540d38d30d6a+\' ns='2' counter='0'
length='67'/></pages></query></api>
However, when I send it back, it's rejected with "badtoken".
REQ: {"format"=>"xml",
"title"=>"User:Jpatokal/Sandbox",
"token"=>"6069665f65933586ddfa540d38d30d6a+\\",
"text"=>"haxx0r",
"action"=>"edit", "summary"=>""}
RES: <api><error code='badtoken' info='Invalid
token'/></api>
What's wrong? The same sequence works fine on my local test wiki.
Here's a packet trace of the actual edit request, which looks fine to
me, including the URL-encoding of the token:
POST /w/api.php HTTP/1.1
Accept: */*; q=0.5, application/xml
User-Agent: MediaWiki::Gateway/0.0.1
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Cookie:
centralauth_Session=f5b0c979d3097489deca4b759f9d49af;centralauth_Token=8f57e36225df5a8f71cfd623718dff59;centralauth_User=Jpatokal;domain=.wikipedia.org;enwikiUserID=8155;enwikiUserName=Jpatokal
Content-Length: 120
Host:
en.wikipedia.org
format=xml&title=User%3AJpatokal%2FSandbox&token=6069665f65933586ddfa540d38d30d6a%2B%5C&text=haxx0r&action=edit&summary=
Cheers,
-jani