我想从网络文档中提取两个值。值为 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;
}
}
?>
非常感谢任何帮助。再次感谢!
答案 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;
}
}
?>
像一个伟大的程序员一样工作!谢谢您的帮助。这真的有助于我指出正确的方向,经过一些研究和测试后,我能够对您的代码进行一些细微的更改,以使其成功运行,无错误。