Я хотел бы получить два значения из веб-документа. Значения api_key а также authenticity_token. Я написал функцию, но проблема в том, что она только вытаскивает api_key. Может кто-нибудь помочь мне с другой частью этой функции, которая позволит мне вытащить authenticity_token, СПАСИБО:
Вот мой код для моей функции:
<?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;
}
}?>
Любая помощь будет принята с благодарностью. Еще раз спасибо!
Маркер подлинности содержится в этом элементе:
<input name="authenticity_token" type="hidden" value="..." />
К сожалению, как вы можете видеть, этот элемент не имеет атрибута ID, и поэтому получить его будет немного сложнее.
$xpath = new DOMXPath($doc);
$input = $xpath->query("input[@name=authenticity_token]")->item(0)->getAttribute("value");
В идеале вам понадобится некоторая проверка ошибок, чтобы убедиться, что элемент существует, но этот код должен работать нормально … при условии, что он находится в том же месте, что и существующая функция «получить ключ API», потому что он использует $doc
,
Вот полный рабочий код:
<?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;
}
}?>
Работает как отличный программист! Спасибо за помощь. Это действительно помогло направить меня в правильном направлении, и после небольшого исследования и тестирования я смог внести некоторые небольшие изменения в ваш код, чтобы он работал успешно и без ошибок.