PHP와 컬을 사용하여 새로운 에테르 패드를 만듭니다
문제
자동으로 새로운 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
- yourfile.here를 파일로 바꾸십시오
- URL을 작업하려는 EtherPad 인스턴스로 바꾸십시오.
원천: http://blog.therpad.org/2014/12/17/post-to-estpad-with-simple-plugin/