Erstellen Sie neue Etherpad mit PHP und CURL
Frage
Ich versuche, einen einfachen PHP-Skript zu schreiben, die automatisch neues etherpads einrichtet (siehe http://etherpad.com/ ).
Sie haben nicht eine API (noch) für die Schaffung neuer Pads so auf Figur Ich versuche, wenn ich die Dinge eine andere Art und Weise tun.
um einige Nach dem Spielen fand ich, dass, wenn Sie eine zufällige Zeichenfolge anhängen zu einem noch nicht erstellt Pad etherpad.com, es wird wieder mit einer Form zu fragen, ob Sie eine neue Etherpad an dieser Adresse erstellen möchten . Wenn Sie dieses Formular einreichen, wird ein neues Pad an dieser URL erstellt werden.
Mein Gedanke war dann konnte ich nur ein PHP-Skript mit CURL erstellen, die diese Form und Trick Etherpad in die Schaffung eines neuen Pad an, was auch immer URL duplizieren würde ich es geben. Ich schrieb das Drehbuch, aber bisher kann ich nicht bekommen es funktioniert. Kann mir jemand sagen, was ich falsch mache?
Als erstes ist hier die HTML-Formular auf der Etherpad Erstellungsseite:
`
<p><tt id="padurl">http://etherpad.com/lsdjfsljfa-fdj-lsdf</tt></p>
<br/>
<p>There is no EtherPad document here. Would you like to create one?</p>
<input type="hidden" value="lsdjfsljfa-fdj-lsdf" name="padId"/>
<input type="submit" value="Create Pad" id="createPad"/>
`
dann ist hier mein Code, der das Formular ROTATION
vorzulegen versucht$ch = curl_init();
//set POST variables
$url = "http://etherpad.com/ep/pad/create?padId=ldjfal-djfa-ldkfjal";
$fields = array(
'padId'=>urlencode("ldjfal-djfa-ldkfjal"),
);
$useragent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
// set user agent
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value; }
print_r($fields_string);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
//execute post
$result = curl_exec($ch);
print_r($result);
//close connection
curl_close($ch);
Als ich das Skript ausführen, meldet PHP, dass alles korrekt ausgeführt zurück, aber Etherpad schafft nicht meinen Pad. Irgendwelche Hinweise, was los ist?
Lösung 3
Hier ist die Antwort ein Freund mir kommen half mit:
Sie tun offenbar einige Plätzchen Validierung, das ist, warum Ihr Skript funktioniert nicht. Sie können dies herauszufinden, durch die neue Pad Schaffung Aufforderung Laden Seite, Clearing-Cookies, und dann Neuladen der Seite. Es wird nicht funktionieren. Tricky, aber effektiv für die meisten lässig Bots.
Hier ist ein Skript, das rund um die bekommt Verjährung. Legen Sie einfach Ihre gewünschten $ PadId und gehen Sie weg.
<?php
$padId = 'asdfjklsjfgadslkjflskj';
$ch = curl_init();
# for debugging
curl_setopt($ch, CURLOPT_HEADER, true);
# parse cookies and follow all redirects
curl_setopt($ch, CURLOPT_COOKIEFILE, '/dev/null');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
# first, post to get a cookie
curl_setopt($ch, CURLOPT_URL, 'http://etherpad.com/' . urlencode
($padId));
$result = curl_exec($ch);
echo $result;
# next, post to actually create the etherpad
curl_setopt($ch, CURLOPT_URL, 'http://etherpad.com/ep/pad/create');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'padId=' . urlencode($padId));
$result = curl_exec($ch);
echo $result;
curl_close($ch);
Andere Tipps
Ich habe nicht diese spezifische Stelle untersucht, aber ich denke, es gibt einige wichtige Header, die fehlen. Hier ist ein sehr allgemeiner Ansatz, der fast anwendbar für jede Website ist:
einen Netzwerk-Sniffer wie Wireshark können Sie alle connectons erfassen. Dann vergleichen die gesendeten POST Felder mit Ihnen.
Eine noch einfachere Art und Weise ist Netcat zu verwenden. Speichern Sie die Seite auf der Festplatte, ändern Sie das Formular-URL zu http: // localhost: 3333 / und führen
$ nc -l -p 3333
Öffnen Sie nun die lokale HTML-Datei und füllen in geeigneter Weise in die Felder ein. Ab sofort finden Sie alle Header sehen, die an den Host übertragen worden wäre.
(Es gibt auch Erweiterungen für Mozilla Firefox, aber sie in der Regel nur verlangsamen den Browser ohne viel Nutzen zu bieten.)
Lesen Sie auch, was ich auf Beiträge geschrieben haben Um die automatische füllen einen Textbereich mit PHP curl wie es könnte Sie mit Ihrer Umsetzung in PHP helfen.
Durch die Art und Weise, die Sie senden den Parameter "padId" über GET und POST. Das ist nicht nötig. Überprüfen Sie, was die Etherpad-Form tatsächlich verwendet und bleiben Sie dabei.
Meine Vermutung ist, dass Sie die Cookies und / oder die Referrer sind vermisst. Er kann die Referrer wird überprüft, um sicherzustellen, Menschen sind nicht Pads ohne Bestätigung zu schaffen.
Wireshark wird helfen, aber hinzufügen, dass auf Ihre curl und sehen, ob es funktioniert.
Um eine Datei zu erstellen, direkt aus HTML oder TEXT
Mit dem setText oder setHTML API Endpunkt. http://etherpad.org/doc/v1.5.0/#index_sethtml_padid_html
Um diese Anwendung leicht zu tun, die Etherpad PHP-Client https://github.com/TomNomNom/etherpad -lite-Client
schreiben aus einer Datei
Diese Funktion wird durch eine Etherpad-Plugin zur Verfügung gestellt. Um sie zu aktivieren ...
Installieren Sie das Etherpad ep_post_data
Plugin von npm install ep_post_data
auf Etherpad Instanz eingeben.
Bei Ihrem Client-Maschine CLI-Typ: curl -X POST -d @yourfile.here http://youretherpad/post
- Ersetzen yourfile.here mit Ihrer Datei
- Ersetzen Sie die URL mit der Etherpad Instanz, die Sie arbeiten möchten.
Quelle: http: / /blog.etherpad.org/2014/12/17/post-to-etherpad-with-this-simple-plugin/