문제

자동으로 새로운 EtherPad를 설정하는 간단한 PHP 스크립트를 작성하려고합니다 ( http://etherpad.com/).

새 패드를 만들기위한 API (아직)가 없으므로 다른 방식으로 일을 할 수 있는지 알아 내려고합니다.

일부 주변에서 재생 한 후, 나는 당신이 the the threatpad를 만들지 않은 패드에 임의의 문자열을 추가하면 해당 주소에서 새 EtherPad를 만들려고할지 묻는 양식으로 돌아올 것임을 알았습니다. 해당 양식을 제출하면 해당 URL에서 새 패드가 생성됩니다.

내 생각은 그 양식을 복제하고 EtherPad를 제가 제공하는 URL에서 새 패드를 만들도록 트릭하는 Curl을 사용하여 PHP 스크립트를 만들 수 있다는 것이 내 생각입니다. 나는 대본을 썼지 만 지금까지 나는 그것을 작동시킬 수 없다. 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

먼저, EtherPad Creation 페이지의 HTML 양식은 다음과 같습니다.

`

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

`

그런 다음 여기 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);

스크립트를 실행하면 PHP는 모든 것이 올바르게 실행되었지만 EtherPad가 내 패드를 만들지 않는다고보고합니다. 무슨 일이 일어나고 있는지 단서가 있습니까?

도움이 되었습니까?

해결책 3

친구가 제가 생각해내는 데 도움이 된 대답은 다음과 같습니다.

그들은 분명히 쿠키 검증을하고 있기 때문에 스크립트가 작동하지 않는 이유입니다. 새 패드 생성 프롬프트 페이지를로드하고 쿠키를 지우고 페이지를 다시로드하여 찾을 수 있습니다. 작동하지 않습니다. 까다 롭지 만 대부분의 캐주얼 봇에 효과적입니다.

다음은 제한 사항을 해결하는 스크립트입니다. 원하는 $ padid를 삽입하면 멀리갑니다.

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

다른 팁

이 특정 사이트를 조사하지 않았지만 누락 된 중요한 헤더가 있다고 생각합니다. 다음은 거의 모든 웹 사이트에 적용되는 매우 일반적인 접근 방식입니다.

Wireshark와 같은 네트워크 스나이퍼를 사용하여 모든 Connecton을 캡처하십시오. 그런 다음 전송 된 포스트 필드를 귀하의 것과 비교하십시오.

더 쉬운 방법은 NetCat을 사용하는 것입니다. 페이지를 디스크에 저장하고 Form-Url을 변경하십시오. http : // localhost : 3333/ 그리고 달리기

$ nc -l -p 3333

이제 로컬 HTML 파일을 열고 필드를 적절하게 채우십시오. 즉시 호스트에게 전송 된 모든 헤더가 표시됩니다.

(Mozilla Firefox에 대한 확장도 있지만 일반적으로 많은 이점을 제공하지 않고 브라우저를 늦추십시오.)

또한 내가 게시 한 내용을 읽으십시오 PHP 컬을 사용하여 텍스트 영역을 자동으로 채우려면 PHP에서의 실현에 도움이 될 수 있습니다.

그건 그렇고, 당신은 get을 통해 "padid"매개 변수를 보내고 있습니다. 그리고 게시하다. 그것은 필요하지 않습니다. 에테르 패드 형식이 실제로 사용하는 것을 확인하고 고수하십시오.

내 생각에 쿠키 및/또는 참조자가 누락된다는 것입니다. 사람들이 확인없이 패드를 만들지 않도록 추천자를 점검 할 수 있습니다.

Wireshark가 도움이되지만 컬에 추가하고 작동하는지 확인하십시오.

html 또는 텍스트에서 직접 파일을 만듭니다

settext 또는 sethtml API 엔드 포인트를 사용하십시오. http://etherpad.org/doc/v1.5.0/#index_sethtml_padid_html

이를 쉽게 수행하려면 EtherPad PHP 클라이언트를 사용하십시오 https://github.com/tomnomnom/etherpad-lite-client

파일에서 게시합니다

이 기능은 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.therpad.org/2014/12/17/post-to-estpad-with-simple-plugin/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top