0

我想在它连接 2 秒后发布$data$url但它不起作用。问题出在哪里?像这样它返回正常站点。

//$url is set above to http://www.putlocker.com/file/CB79E6201EDBA3ED
//$hash variable is set above in the code 
$post = fopen($url, "r");
if (!$post) die("Error\n");

$data = "hash=$hash&confirm=Continue%20as%20Free%20User";
sleep(2);

fwrite($post, "POST $url HTTP/1.1\r\n");
fwrite($post, "Referer: $url\r\n");
fwrite($post, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($post, "Host: www.putlocker.com");
fwrite($post, "Content-length: " . strlen($data) . "\r\n");
fwrite($post, "Accept: */*\r\n");
fwrite($post, "\r\n");
fwrite($post, "$data\r\n");
fwrite($post, "\r\n");

if ($post) {
    while (($buffer = fgets($post, 4096)) !== false) {
        echo $buffer;
    }
    if (!feof($post)) {
        echo "Error fgets()\n";
    }

}
fclose($post);

这是我的最新代码:

require_once('curll.php');
libxml_use_internal_errors(true);
$url = "http://www.putlocker.com/file/CB79E6201EDBA3ED";

$curl = new curling();
$output = $curl->get_page($url); //call your landing page url from here
$dom_document = new DOMDocument();

$dom_document->loadHTML($output);

$dom_xpath = new DOMXPath($dom_document);
foreach($dom_xpath->query("//input[@name=\"hash\"]/@value") as $node) $hash=$node->textContent;
foreach($dom_xpath->query("//form/@action") as $node) $post_url=$node->textContent;
sleep(2);
$data = array('hash' => $hash, 'confirm' => 'Continue%20as%20Free%20User');

$output2 = $curl->post_page($post_url, $data);
$curl->close_session();
echo $output2;
4

1 回答 1

0

这是我编写的一个通用类,用于简化 curl 的使用。首先将其保存到某个位置的文件中。

   <?php

class curling {

    private $_ch = NULL;    

    private $_file = NULL;

    private $_html = NULL;

    private $_cookiejar = NULL;

    public function __construct()
    {
        $this->init();
    }

    private function init()
    {
        $this->_ch = curl_init();

        curl_setopt($this->_ch, CURLOPT_VERBOSE, 0);
        curl_setopt($this->_ch, CURLOPT_HEADER, 0);
        curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($this->_ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($this->_ch, CURLOPT_TIMEOUT,1000);
        curl_setopt($this->_ch, CURLOPT_COOKIEFILE, "cookies.txt");
        curl_setopt($this->_ch, CURLOPT_COOKIEJAR, "cookies.txt");
        curl_setopt($this->_ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    }

    /**
     * 
     * Enter description here ...
     * @param unknown_type $res
     * @param unknown_type $data
     */
    private function write($res, $data)
    {
        $this->_html .= $data;
        return strlen($data);
    }

    /**
     * 
     * Enter description here ...
     * @param unknown_type $url
     */
    function get_page($url)
    {
        if ($this->ch == NULL) $this->init();

        curl_setopt($this->_ch, CURLOPT_URL, $url);
        curl_setopt($this->_ch, CURLOPT_CONNECTTIMEOUT, 5);
        $this->_html = curl_exec($this->_ch);
        if (curl_errno($this->_ch) !== 0) {
            throw new Exception("unable to retrive content", 100);
        }
        curl_close($this->_ch);

        return $this->_html;
    }

    /**
     * 
     * Enter description here ...
     * @param unknown_type $url
     * @param unknown_type $data
     */
    function post_page($url, $data)
    {

        if ($this->ch == NULL) $this->init();

        curl_setopt($this->_ch, CURLOPT_URL, $url);
        curl_setopt($this->_ch, CURLOPT_POST, true);
        curl_setopt($this->_ch, CURLOPT_POSTFIELDS, http_build_query($data));

        $this->_html = curl_exec($this->_ch);
        //curl_close($this->_ch);

        return $this->_html;
    }

    function close_session()
    {
        curl_close($this->_ch);
    }

}

?>

然后是你的代码。

    <?php 
require_once('curling.php');
libxml_use_internal_errors(true);
$url = "http://www.putlocker.com/file/CB79E6201EDBA3ED";

$curl = new curling();
$output = $curl->get_page($url); //call your landing page url from here
$dom_document = new DOMDocument();

$dom_document->loadHTML($output);

$dom_xpath = new DOMXPath($dom_document);
foreach($dom_xpath->query("//input[@name=\"hash\"]/@value") as $node) $hash=$node->textContent;
$data = array('hash' => $hash, 'confirm' => 'Continue%20as%20Free%20User');

$output2 = $curl->post_page($url, $data);
$curl->close_session();
echo $output2;
于 2013-06-22T11:16:55.813 回答