Question

Je suis en train d'écrire un simple script PHP qui configure automatiquement les nouveaux etherpads (voir http://etherpad.com/ ).

Ils ne sont pas une API (encore) pour la création de nouveaux tampons, donc je suis en train de comprendre si je peux faire des choses d'une autre manière.

Après avoir joué un peu, je trouve que si vous ajoutez une chaîne aléatoire à etherpad.com à un tampon non encore créé, il reviendra avec un formulaire demandant si vous voulez créer une nouvelle EtherPad à cette adresse . Si vous soumettez ce formulaire, un nouveau pad sera créé à cette URL.

Ma pensée était alors je pouvais créer un script PHP en utilisant CURL qui ferait double emploi avec cette forme et piègent EtherPad dans la création d'un nouveau pad quel que soit l'URL que je lui donne. J'ai écrit le scénario, mais jusqu'à présent, je ne peux pas le faire fonctionner. Quelqu'un peut-il me dire ce que je fais mal?

Tout d'abord, voici le formulaire HTML sur la page de création de 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"/>

`

Alors voici mon code qui tente d'envoyer le formulaire en utilisant 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);

Quand je lance le script, rapporte PHP arrière que tout exécuté correctement, mais EtherPad ne crée pas mon pad. Tous les indices ce qui se passe?

Était-ce utile?

La solution 3

Voici la réponse un ami m'a aidé à venir avec:

  

Ils font apparemment certains cookies   validation, c'est pourquoi votre script   ne fonctionne pas. Vous pouvez trouver cela   en chargeant la nouvelle invite de création pad   page de compensation vos cookies, puis   recharger la page. Il ne fonctionnera pas.   Tricky, mais efficace pour la plupart occasionnels   bots.

     

Voici un script qui contourne la   limitation. Il suffit d'insérer votre choix   $ PadId et vous allez loin.

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

Autres conseils

Je n'ai pas enquêté sur ce site spécifique, mais je suppose qu'il ya des têtes importantes qui manquent. Voici une approche très générale qui est applicable pour presque tout site Web:

Utilisez un renifleur de réseau, tel que Wireshark pour capturer tous les connectons. Ensuite, comparez les champs POST envoyés avec le vôtre.

Une façon encore plus facile est d'utiliser Netcat. Il suffit d'enregistrer la page sur le disque, changer la forme URL http: // localhost: 3333 / et exécuter

$ nc -l -p 3333

Maintenant, ouvrez le fichier HTML local et remplissez les champs de façon appropriée. Immédiatement, vous verrez tous les en-têtes qui aurait été transmis à l'hôte.

(Il existe également des extensions pour Mozilla Firefox, mais en général, ils ralentissent juste en bas du navigateur sans fournir beaucoup d'avantages.)

lire aussi ce que j'ai posté sur pour remplir automatiquement une zone de texte à l'aide gondoler php car il peut vous aider avec votre réalisation en PHP.

Par ailleurs, vous envoyez le paramètre "padId" via GET et POST. Ce n'est pas nécessaire. Vérifier ce que le Etherpad-forme utilise et de s'y tenir en fait avec.

Je pense que vous manquez les cookies et / ou le referrer. Il peut être vérifier le referrer pour assurer que les gens ne créent pas de tampons sans confirmation.

Wireshark aider, mais ajouter à votre boucle et voir si cela fonctionne.

Pour créer un fichier directement à partir de HTML ou texte

Utilisez le setText ou point final API setHTML. http://etherpad.org/doc/v1.5.0/#index_sethtml_padid_html

Pour ce faire facilement cette utilisation https://github.com/TomNomNom/etherpad -lite client

Pour poster à partir d'un fichier

Cette fonctionnalité est fournie par un plug-in Etherpad. Pour lui permettre ...

Installer le plugin ep_post_data Etherpad en tapant npm install ep_post_data sur votre instance Etherpad.

A la machine client CLI type: curl -X POST -d @yourfile.here http://youretherpad/post

  1. Remplacez yourfile.here avec votre fichier
  2. Remplacez l'URL par l'instance Etherpad vous voulez travailler à.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top