T.b.v. ons intranet gebouwd in Wordpress probeer ik geautomatiseerd afbeeldingen (grafieken) toe te voegen. Dat lukt aardig door van de originele afbeeldingen een kopie naar de webserver te maken, andere formaten van de afbeelding te maken zoals deze door Wordpress gebruikt worden en de nodige records in te voegen en bestaande aan te passen. Ik zie dan in het intranet voor de beheerder met voldoende rechten de nieuwe afbeelding verschijnen, als was deze handmatig toegevoegd, maar deze wordt nog niet "gepublished". Hiervoor moet ik in Wordpress handmatig op de knop "Update" klikken. Deze knop is t.b.v. alle pagina's wat je ook maar bewerkt dus niet specifiek van de gebruikte plugin voor de afbeeldingen. Het "klikken" op die knop willen we ook automatiseren dus willen we de code die daar achter zit aanroepen vanuit de Delphi applicatie. Dit lijkt het algemene php-script /wp-admin/post.php te zijn dus ik heb geprobeerd met Indy (IdHTTP) dit script aan te roepen.
Delphi Code:
var
Parameters: TStringList;
Response: TStringStream;
begin
// Geef het applicatie-path door aan de functie die de SSL-lib moet gaan openen.
IdOpenSSLSetLibPath(ExtractFilePath(Application.ExeName));
Parameters := TStringList.Create;
Response := TStringStream.Create;
try
IdHTTP.Request.BasicAuthentication := True;
IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP.Request.Charset := 'utf-8';
IdHTTP.Request.Username := 'adminwp';
IdHTTP.Request.Password := 'adminwp';
IdHTTP.Request.Host := BASE_URL;
Parameters.Add('username=adminwp');
Parameters.Add('password=adminwp');
Parameters.Add('post=12926'); // het ID van de gallery
Parameters.Add('action=post'); // de opdracht (action) in het php-script post.php.
try
IdHTTP.Post(BASE_URL + '/wp-admin/post.php', Parameters, Response);
RzMemo.Lines.Add(Format('Response Code: %d', [IdHTTP.ResponseCode]));
RzMemo.Lines.Add(Format('Response Text: %s', [IdHTTP.ResponseText]));
except
on E:EIdHTTPProtocolException do
ShowMessage(E.Message + CRLF + E.ErrorMessage);
end;
finally
Parameters.Free;
Response.Free;
end;
end;
Welke username en/of password ik ook gebruik, de respons is altijd
Delphi Code:
Response Code: 200
Response Text: HTTP/1.1 200 OK
Behalve als ik een andere URL gebruik die niet bestaat krijg ik een foutmelding.
Maar na een refresh van de intranet-pagina is de toegevoegde afbeelding nog steeds niet gepublished en dus voor een ander niet zichtbaar.
Ik heb vervolgens een TIdLogFile aan IdHTTP gekoppeld (naast het gebruik van TIdSSLIOHandlerSocketOpenSSL) en die geeft dit resultaat (de verdere details achter iedere regel heb ik eruit geknipt) :
Delphi Code:
Stat Connected.
Sent 12-05-2017 16:18:41: POST /wp-admin/post.php HTTP/1.0<EOL>
Sent 12-05-2017 16:18:41: user=adminwp&password=adminwp&post=12926&action=post
Recv 12-05-2017 16:18:44: HTTP/1.1 302 Moved Temporarily<EOL>
Sent 12-05-2017 16:18:44: POST /wp-login.php?redirect_to=http%3A%2F%2Fxxxx.xxxxxx.nl%2Fwp-admin%2Fpost.php&reauth=1 HTTP/1.0<EOL>
Sent 12-05-2017 16:18:44: user=adminwp&password=adminwp&post=12926&action=post
Recv 12-05-2017 16:18:46: HTTP/1.1 302 Moved Temporarily<EOL>
Sent 12-05-2017 16:18:46: POST /login/?login=empty HTTP/1.0<EOL>
Sent 12-05-2017 16:18:46: user=adminwp&password=adminwp&post=12926&action=post
Recv 12-05-2017 16:18:48: HTTP/1.1 200 OK<EOL>
Ik heb het idee dat ik wel bij de webserver geraak, maar niet dat er iets uitgevoerd wordt. Het is ook nog maar de vraag of mijn analyse dat post.php achter die knop aangeroepen wordt juist is. N.a.v. andere threads heb ik ook al naar Fiddler gekeken maar wordt er niet veel wijzer van. Ik zie dezelfde teksten terug die ik ook gelogd heb m.b.v. TIdLogFile.
Wie kan me een aanwijzing geven wat er fout gaat ?
Bookmarks