Domanda

Sto cercando di scrivere un semplice script PHP che imposta automaticamente nuovi etherpads (vedi http://etherpad.com/ ).

Non hanno un'API (ancora) per la creazione di nuove pastiglie quindi sto cercando di capire se posso fare le cose in un altro modo.

Dopo aver suonato in giro un po ', ho scoperto che se si aggiunge una stringa casuale per etherpad.com a un pad non ancora creato, ma tornerà con una forma che chiede se si desidera creare un nuovo Etherpad a quell'indirizzo . Se si presenta quella forma, un nuovo pad verrà creato in quel URL.

Il mio pensiero era allora ho potuto solo creare uno script PHP utilizzando CURL che duplicare quella forma e trucco Etherpad nella creazione di un nuovo pad a qualunque URL dò. Ho scritto la sceneggiatura, ma finora non riesco a farlo funzionare. Qualcuno può dirmi che cosa sto facendo male?

Per prima cosa, ecco il modulo HTML nella pagina di creazione Etherpad:

`

<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"/>

`

Quindi ecco il mio codice che tenta di inviare il modulo utilizzando CURL

$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);

Quando eseguo lo script, PHP riporta indietro che tutto eseguito correttamente, ma Etherpad non crea il pad. Eventuali indizi che cosa sta succedendo?

È stato utile?

Soluzione 3

Ecco la risposta di un amico mi ha aiutato a venire con:

  

Stanno facendo a quanto pare alcuni cookie   convalida, è per questo che lo script   non funziona. È possibile trovare questo fuori   caricando il nuovo prompt creazione pad   pagina cancellato i cookie, e poi   ricaricare la pagina. Non funzionerà.   Tricky, ma efficace per la maggior parte casuale   bot.

     

Ecco uno script che ottiene intorno al   limitazione. Basta inserire il desiderato   $ PadId e si va via.

<?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);

Altri suggerimenti

Non ho indagato questo sito specifico, ma credo che ci sono alcune intestazioni importanti che mancano. Qui è un approccio molto generale che è applicabile per quasi qualsiasi sito web:

Utilizzare uno sniffer di rete come Wireshark per catturare tutti i connectons. Quindi confrontare i campi POST inviati con la vostra.

Un modo ancora più semplice è quello di utilizzare Netcat. Basta salvare la pagina su disco, cambiare la forma-URL a http: // localhost: 3333 / ed eseguire

$ nc -l -p 3333

Ora aprite il file HTML locale e compilare i campi in modo appropriato. Immediatamente vedrete tutte le intestazioni che sarebbero stati trasmessi per l'host.

(Ci sono anche estensioni per Mozilla Firefox ma in generale solo rallentare il browser senza fornire molto beneficio.)

Anche a leggere quello che ho postato su per auto riempire un'area di testo utilizzando php arricciare come potrebbe aiutarvi con la vostra realizzazione in PHP.

Tra l'altro, si sta inviando il "padId" parametro tramite GET e POST. Che non è necessario. Controllare ciò che lo utilizza Etherpad-forma e bastone con esso.

La mia ipotesi è che vi state perdendo i cookie e / o il referrer. Si può verificare il referrer per garantire le persone non sono la creazione di pastiglie senza conferma.

Wireshark aiuterà, ma aggiungere che, per la vostra arricciatura e vedere se funziona.

Per creare direttamente un file da HTML o testo

Utilizza il setText o setHTML API endpoint. http://etherpad.org/doc/v1.5.0/#index_sethtml_padid_html

Per fare facilmente questo uso il client https://github.com/TomNomNom/etherpad -lite-client

Per pubblicare da un file

Questa funzione è fornita da un plugin Etherpad. Per abilitarlo ...

Installare il plugin ep_post_data Etherpad digitando npm install ep_post_data sull'istanza Etherpad.

Al vostro cliente tipo di macchina CLI: curl -X POST -d @yourfile.here http://youretherpad/post

  1. Sostituire yourfile.here con il file
  2. sostituire l'URL con l'istanza Etherpad si vuole lavorare a.

Fonte: http: / /blog.etherpad.org/2014/12/17/post-to-etherpad-with-this-simple-plugin/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top