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?

War es hilfreich?

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

  1. Ersetzen yourfile.here mit Ihrer Datei
  2. 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/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top