PHP DOMDocument:当一个值没有ID值时,如何从网页中提取两(2)个值

时间:2014-09-30 09:55:21

标签: php domdocument

我想从网络文档中提取两个值。值为 api_key authenticity_token 。我写了一个函数,但问题是它只能拔出api_key。有人可以帮助我使用这个函数的另一部分,这将使我能够提取出真实性,感谢:

这是我的功能代码:

    <?php 
class apiKey{
    public $apikey;
    public $authenticity_token;


     function getApiKey(){
        //Get api_key and pass it in
        $apikey = null;
        $doc = new DOMDocument();
        $semcatStartUrl = 'https://entryform.semcat.net/1800stonewall';
        libxml_use_internal_errors(true);
        $doc->loadHTMLFile("$semcatStartUrl");
        libxml_clear_errors();
        $apikey = $doc->getElementById('api_key')->getAttribute('value');
        return $apikey;

    }

    function getAuthenticityToken(){
        //My guesstimate this doesn’t work because the form hasn’t been /               //submitted yet
        $authenticity_token = $_POST['authenticity_token'];
        return $authenticity_token;
    }

}


?>

非常感谢任何帮助。再次感谢!

2 个答案:

答案 0 :(得分:0)

真实性令牌包含在此元素中:

<input name="authenticity_token" type="hidden" value="..." />

不幸的是,正如您所看到的,此元素没有ID属性,因此获取它会稍微复杂一些。

$xpath = new DOMXPath($doc);
$input = $xpath->query("input[@name=authenticity_token]")->item(0)->getAttribute("value");

理想情况下,您需要在其中进行一些错误检查以确保元素存在,但此代码应该可以正常工作...前提是它与您现有的&#34;获取API密钥位于同一位置&#34 ;函数,因为它使用$doc

答案 1 :(得分:0)

以下是完整的工作代码:

<?php 
class apiKey{
    public $apikey;
    public $authenticity_token;


     function getApiKey(){
        //Get api_key and pass it in
        $apikey = null;
        $authenticity_token = null;
        $doc = new DOMDocument();
        $semcatStartUrl = 'https://entryform.semcat.net/1800stonewall';
        libxml_use_internal_errors(true);
        $doc->loadHTMLFile("$semcatStartUrl");
        libxml_clear_errors();
        $apikey = $doc->getElementById('api_key')->getAttribute('value');

        //Original 2 Lines
        //$xpath = new DOMXPath($doc);
        //$input = $xpath->query("input[@name=authenticity_token]")->item(0)->getAttribute("value");

            //Modified 2 Lines and added 2 Lines
        $xpath = new DOMXPath($doc);    
        $input = $xpath->query("//input[@name='authenticity_token']"); 
        $authenticity_token = $input->item(0)->getAttribute('value');
        $this->authenticity_token = $authenticity_token;

        return $apikey;

    }

    function getAuthenticityToken(){

                return $this->authenticity_token;
    }

}


?>

像一个伟大的程序员一样工作!谢谢您的帮助。这真的有助于我指出正确的方向,经过一些研究和测试后,我能够对您的代码进行一些细微的更改,以使其成功运行,无错误。