You should use jq --raw-output. On Tue, Jan 31, 2017 at 12:08 AM, geoffreydebelie <geoffreydebe...@zoho.com> wrote:
> Hi everyone, > > I'm trying to login using the MediaWiki API. This works if I copy the > token manually in the code every time again. Using the token from the > variable DOESNT work, but copy pasting the same token into the TOKEN= > assignment (into the source code) DOES work! > > After that, I'm trying to edit a page. I have the same problem with the > edit token. It cannot be read from the variable, unless I copied the token > manually to the variable in the source code :( > > I know I'm almost there, but the tokens are getting in the way. > > Why doesn't it work when I'm parsing the token from the API? When I > copy-paste the same token into the source code directly it works.. > > The token looks the same to me! Is curl getting in the way here? I tried > several things, like dropping the last \ from the token and then passing it > to curl, but to no avail. > > Output of the script when it doesn't work (reading the token from the > TOKEN variable when parsing from the API): > $ ./clientcode.sh > UTF8 check: ☠ > Logging into https://nl.wikipedia.org/w/api.php as Smile4ever... > Get login token... > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left > Speed > 100 112 100 112 0 0 649 0 --:--:-- --:--:-- --:--:-- > 666 > { > "batchcomplete": "", > "query": { > "tokens": { > "logintoken": "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\" > } > } > } > Login token is "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\" > ----- > Logging in... > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left > Speed > 100 302 100 142 100 160 829 935 --:--:-- --:--:-- --:--:-- > 958 > { > "error": { > "code": "badtoken", > "info": "Invalid CSRF token.", > "*": "See https://nl.wikipedia.org/w/api.php for API usage." > }, > "servedby": "mw1288" > } > > Unable to login, is logintoken "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\" > correct? > > ========================================== > > Output of the script when it does work (reading the token from the TOKEN > variable when using a fixed value for the login token): > $ ./clientcode.sh > UTF8 check: ☠ > Logging into https://nl.wikipedia.org/w/api.php as Smile4ever... > Get login token... > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left > Speed > 100 111 100 111 0 0 642 0 --:--:-- --:--:-- --:--:-- > 660 > { > "batchcomplete": "", > "query": { > "tokens": { > "logintoken": "7bfac90f99869aeb77fee2646d0022f1589040d3+\\" > } > } > } > Login token is 3e929f9275d81f12a1f7c93e1beec99f589040b4+\ > ----- > Logging in... > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left > Speed > 100 224 100 76 100 148 36 71 0:00:02 0:00:02 --:--:-- > 72 > { > "clientlogin": { > "status": "PASS", > "username": "Smile4ever" > } > } > Successfully logged in as Smile4ever, STATUS is "PASS" > > Script: > > #!/usr/bin/env bash > > #Needs curl > USERNAME="Smile4ever" > USERPASS="******" > WIKIAPI="https://nl.wikipedia.org/w/api.php" > cookie_jar="wikicj" > #Will store file in wikifile > > echo "UTF8 check: ☠" > #################login > echo "Logging into $WIKIAPI as $USERNAME..." > > ############### > #Login part 1 > #printf "%s" "Logging in (1/2)..." > echo "Get login token..." > CR=$(curl -S \ > --location \ > --retry 2 \ > --retry-delay 5\ > --cookie $cookie_jar \ > --cookie-jar $cookie_jar \ > --user-agent "Curl Shell Script" \ > --keepalive-time 60 \ > --header "Accept-Language: en-us" \ > --header "Connection: keep-alive" \ > --compressed \ > --request "GET" "${WIKIAPI}?action=query&meta= > tokens&type=login&format=json") > > echo "$CR" | jq . > > rm login.json > echo "$CR" > login.json > TOKEN=$(jq '.query.tokens.logintoken' login.json) > #TOKEN="${TOKEN//\"/}" #replace double quote by nothing > > #Remove carriage return! > #printf "%s" "$TOKEN" > token.txt > #TOKEN=$(cat token.txt | sed 's/\r$//') > #TOKEN="$(<token.txt)" > #TOKEN="${TOKEN//\+\\/\+}" #replace +\ by + > > > #echo -n $TOKEN > token.txt > #TOKEN="${TOKEN//\+\\/%2b%5c}" #replace +\ by %2b%5c > #TOKEN="33bf0c310b22a836be6b28905470d3a1589031da+\\" > > #TOKEN="24949330db743d9af74e7e56f2b523725890407b+\\" > if [ "$TOKEN" == "null" ]; then > echo "Getting a login token failed." > exit > else > echo "Login token is $TOKEN" > echo "-----" > fi > > ############### > #Login part 2 > echo "Logging in..." > CR=$(curl -S \ > --location \ > --cookie $cookie_jar \ > --cookie-jar $cookie_jar \ > --user-agent "Curl Shell Script" \ > --keepalive-time 60 \ > --header "Accept-Language: en-us" \ > --header "Connection: keep-alive" \ > --compressed \ > --data-urlencode "username=${USERNAME}" \ > --data-urlencode "password=${USERPASS}" \ > --data-urlencode "rememberMe=1" \ > --data-urlencode "logintoken=${TOKEN}" \ > --data-urlencode "loginreturnurl=http://google.be" \ > --request "POST" "${WIKIAPI}?action=clientlogin&format=json") > > echo "$CR" | jq . > > STATUS=$(echo $CR | jq '.clientlogin.status') > if [[ $STATUS == *"PASS"* ]]; then > echo "Successfully logged in as $USERNAME, STATUS is $STATUS." > echo "-----" > else > echo "Unable to login, is logintoken ${TOKEN} correct?" > exit > fi > > ############### > #Get edit token > echo "Fetching edit token..." > CR=$(curl -S \ > --location \ > --cookie $cookie_jar \ > --cookie-jar $cookie_jar \ > --user-agent "Curl Shell Script" \ > --keepalive-time 60 \ > --header "Accept-Language: en-us" \ > --header "Connection: keep-alive" \ > --compressed \ > --request "POST" "${WIKIAPI}?action=query&meta= > tokens&format=json") > > echo "$CR" | jq . > echo "$CR" > edittoken.json > EDITTOKEN=$(jq '.query.tokens.csrftoken' edittoken.json) > rm edittoken.json > EDITTOKEN="${EDITTOKEN//\"/}" #replace double quote by nothing > #EDITTOKEN="${EDITTOKEN//\+\\/\+}" #replace +\ by + > > if [[ $EDITTOKEN == *"+\\"* ]]; then > echo "Edit token is: $EDITTOKEN" > else > echo "Edit token not set." > exit > fi > > ############### > #Make a test edit > #EDITTOKEN="d55014d69f1a8c821073bb6724aced7658904018+\\" > CR=$(curl -S \ > --location \ > --cookie $cookie_jar \ > --cookie-jar $cookie_jar \ > --user-agent "Curl Shell Script" \ > --keepalive-time 60 \ > --header "Accept-Language: en-us" \ > --header "Connection: keep-alive" \ > --compressed \ > --data-urlencode "title=Gebruiker:Smile4ever/test4" \ > --data-urlencode "appendtext={{nocat|2017|01|31}}" \ > --data-urlencode "token=${EDITTOKEN}" \ > --request "POST" "${WIKIAPI}?action=edit&format=json") > > echo "$CR" | jq . > > Kind regards, > Geoffrey De Belie > > > > > _______________________________________________ > Mediawiki-api mailing list > Mediawiki-api@lists.wikimedia.org > https://lists.wikimedia.org/mailman/listinfo/mediawiki-api >
_______________________________________________ Mediawiki-api mailing list Mediawiki-api@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-api