PHP ve CURL kullanarak yeni etherpad oluşturun

3 Cevap php

Ben otomatik olarak yeni etherpads ({[) (0]} bakınız) ayarlar basit bir PHP komut dosyası yazmak çalışıyorum.

Onlar bu yüzden ben şeyleri başka şekilde yapmak eğer anlamaya çalışıyorum yeni pedleri oluşturmak için bir API (henüz) yok.

Bazı etrafında oynadıktan sonra, ben bir-henüz-oluşturulmuş pad etherpad.com rastgele bir dize eklemek, eğer o adreste yeni bir etherpad oluşturmak istiyorsanız form soran geri geleceğiz bulundu. Eğer bu formu teslim ederse, yeni bir ped o URL'ye oluşturulur.

Benim düşünce o zaman ben sadece bunu vermek ne URL yeni bir pedi oluşturarak bu formu ve hile etherpad çoğaltmak istiyorum CURL kullanarak bir PHP komut dosyası oluşturabilir oldu. Ben senaryoyu yazdım ama bugüne kadar ben o çalışma alınamıyor. Birisi ben yanlış yapıyorum bana söyleyebilir?

Öncelikle, burada etherpad oluşturma sayfasında HTML formu bulunuyor:

`

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

`

Daha sonra burada CURL kullanarak formu göndermek için çalışır benim kod

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

Ben komut dosyasını çalıştırdığınızda, PHP her şeyi doğru yürütülür ama etherpad benim tampon oluşturmak değil bu geri bildiriyor. Ne herhangi bir ipucu oluyor?

3 Cevap

Burada bir arkadaşım bana gelip yardım cevap var:

They're apparently doing some cookie validation, that's why your script isn't working. You can find this out by loading the new pad creation prompt page, clearing your cookies, and then reloading the page. It won't work. Tricky, but effective for most casual bots.

Here's a script that gets around the limitation. Just insert your desired $padId and away you go.

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

Ben bu özel siteyi araştırmadım ama eksik olan bazı önemli başlıkları vardır sanırım. Burada hemen hemen her web sitesi için geçerli olan çok genel bir yaklaşımdır:

Tüm connectons yakalamak için Wireshark gibi bir ağ algılayıcısı kullanın. Sonra sizinki ile gönderilen POST alanları karşılaştırmak.

Daha kolay bir yol Netcat kullanmaktır. Sadece http://localhost:3333/ ve çalıştırmak için Form-URL'sini değiştirmek, diske sayfayı kaydedin

$ nc -l -p 3333

Şimdi yerel HTML dosyasını açın ve uygun alanları doldurun. Hemen ana bilgisayara iletilen olurdu tüm başlıkları göreceksiniz.

(Mozilla Firefox için ama genel olarak onlar sadece çok fayda sağlamadan tarayıcınızı yavaşlatabilir uzantıları da vardır.)

Ayrıca PHP içinde gerçekleştirilmesi ile size yardımcı olabilir gibi http://stackoverflow.com/questions/1700821/to-auto-fill-a-text-area-using-php-curl/1702025#1702025 attılar okumak.

Arada, GET and POST yoluyla parametre "padId" gönderiyor. Bu gerekli değildir. Etherpad-form aslında kullandığı ne kontrol ve sopa ile.

Benim tahminim kurabiye ve / veya yönlendirme eksik olmasıdır. İnsanların onay olmadan pedleri yaratmak değildir sağlamak için yönlendirme kontrol edilebilir.

Wireshark yardım, ancak kıvrılma için eklemek ve eğer o inşaat göreceksiniz.