سؤال

أحاول كتابة نص PHP بسيط يقوم تلقائيا بإعداد Etherpads جديد (انظر http://etherpad.com/).

ليس لديهم API (بعد) لإنشاء منصات جديدة، لذلك أحاول معرفة ما إذا كان بإمكاني فعل أشياء أخرى.

بعد اللعب حول بعض، وجدت أنه إذا قمت بإلحاق سلسلة عشوائية إلى etherpad.com إلى لوحة غير موجودة حتى الآن، فسيعود مع نموذج يسأل عما إذا كنت ترغب في إنشاء EtherPad جديد في هذا العنوان. إذا قمت بإرسال هذا النموذج، فسيتم إنشاء لوحة جديدة على عنوان URL هذا.

فكرتي ثم هل يمكنني فقط إنشاء برنامج نصي PHP باستخدام Curl الذي من شأنه أن يكرر هذا النموذج والخدعة Etherpad في إنشاء لوحة جديدة بأي عنوان URL الذي أعطيهه. كتبت النصي ولكن حتى الآن لا يمكنني الحصول عليه. هل يمكن لأحد أن يقول لي ما أفعله خطأ؟

أولا، إليك نموذج HTML في صفحة إنشاء 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"/>

`

ثم ها هي رمزي الذي يحاول تقديم النموذج باستخدام حليقة

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

عندما أقوم بتشغيل البرنامج النصي، أعد تقارير PHP أن كل شيء تم تنفيذه بشكل صحيح، لكن Etherpad لا ينشئ وسادتي. أي أدلة ما يحدث؟

هل كانت مفيدة؟

المحلول 3

إليك الإجابة التي ساعدني صديق في الخروج عن:

يبدو أنهم يقومون ببعض صحة ملف تعريف الارتباط، ولهذا السبب لا يعمل البرنامج النصي الخاص بك. يمكنك العثور على ذلك عن طريق تحميل صفحة موجه إنشاء الوسادة الجديدة، وإزالة ملفات تعريف الارتباط الخاصة بك، ثم إعادة تحميل الصفحة. لن يعمل. صعبة، ولكنها فعالة بالنسبة لمعظم الروبوتات عارضة.

إليك سيناريو يحصل حول القيد. ما عليك سوى إدراج بطول $ الموديل والذهاب الذي تذهب إليه.

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

نصائح أخرى

لم أحقق في هذا الموقع المحدد ولكن أعتقد أن هناك بعض الرؤوس المهمة المفقودة. إليك نهج عام للغاية ينطبق على أي موقع تقريبا:

استخدم Network Sniffer مثل Wireshark لالتقاط جميع الكاتب. ثم قارن حقول نشر المرسلة مع لك.

طريقة أسهل هي استخدام NetCAT. فقط احفظ الصفحة على القرص، وقم بتغيير عنوان URL النموذج إلى http: // localhost: 3333 / و اهرب

$ nc -l -p 3333

الآن افتح ملف HTML المحلي وملء الحقول بشكل مناسب. سترى على الفور جميع الرؤوس التي كانت ستنتقل إلى المضيف.

(هناك أيضا ملحقات ل Mozilla Firefox ولكن بشكل عام، فإنها تبطئ المتصفح دون تقديم الكثير من الفائدة.)

اقرأ أيضا ما قمت به على إلى ملء السيارات منطقة النص باستخدام PHP Curl لأنها قد تساعدك في تحقيقك في PHP.

بالمناسبة، أنت ترسل المعلمة "Padid" عبر Get و بريد. ذلك ليس ضروريا. تحقق ما يستخدمه النموذج الأثرية في الواقع والعصا بها.

تخميني هو أنك تفتقد ملفات تعريف الارتباط و / أو الإحالة. قد يتم التحقق من الإحالة لضمان عدم خلق الناس منصات دون تأكيد.

سيساعد Wireshark، ولكن أضف ذلك إلى حليقة ومعرفة ما إذا كان يعمل.

لإنشاء ملف مباشرة من HTML أو النص

استخدم نقطة النهاية API Settext أو Sethtml. http://etherpad.org/doc/v1.5.0/#index_sethtml_padid_html.

لاستخدام هذا بسهولة عميل Etherpad PHP https://github.com/tomnomnom netherpad-lite-lite.

للنشر من ملف

يتم توفير هذه الميزة بواسطة البرنامج المساعد Etherpad. لتمكينها ...

تثبيت etherpad. ep_post_data البرنامج المساعد عن طريق الكتابة npm install ep_post_data على مثيل EtherPad الخاص بك.

في آلة عميل الخاص بك CLI: curl -X POST -d @yourfile.here http://youretherpad/post

  1. استبدال yourfile.here مع الملف الخاص بك
  2. استبدل عنوان URL بمثيل EtherPad الذي تريد العمل عليه.

مصدر: http://blog.etherpad.org/2012/12/17/post-to-entpad-with-this-simple-plugin/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top