Я пытаюсь закодировать простой скрипт с curl, но проблема в том, что мне нужно собрать специальный ключ, который создается при каждом новом запросе POST (onLoad()
). Проблему можно легко пропустить, создав новый элемент DOM и получив значение с помощью функции GetElementById из DOM, но в этом случае нет "id", объявленного в конкретном теге, с которого я хочу вернуть значение. Есть только имя.
Пример:
<input name="trans_id" value="Lk+Vz957skV845b7x2DX7iyR1FI=" type="hidden">
Bellow есть псевдокод, который я сделал сегодня (последний абзац там, где мне нужна помощь):
<?php
// Author : me
// Date : 10.11.2013.
?>
<?php
// Declaring variables :)
$data_string = '';
$url = 'http://www.website.com';
$uagent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6';
// Declaring variables for e-pay
$url2 = 'http:/website2.com';
...
$exChar = '|';
$exStr = '';
$exStr = Explode($exChar, $_POST['ccep']);
$data = array (
"email" => '',
...
"submitFromInputForm" => 'Next',
);
foreach($data as $key=>$value) { $data_string .= $key.'='.$value.'&'; }
rtrim($data_string, '&');
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt ($ch, CURLOPT_POST, count($data));
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data_string);
$result = curl_exec ($ch);
print($result);
// ====================================================================
// Need help with this function
$check = strpos($result, 'Confirmation');
if ($check == True) {
$doc = new DOMDocument();
@$doc->loadHTML($result);
$id = $doc->getElementsByName('trans_id');
echo 'Value:' . $id;
}
// ====================================================================
curl_close($ch);
?>
Но, честно говоря, я не смог получить результат от этой функции, потому что, ну, это не exsist. Поиск в Google помогает мне получить результаты с помощью getElementsByTagName, которые после чтения документации из официального сайта PHP не решают мою проблему.
Заметка в конце: я не хочу включать Javascripting, только чистый PHP.
Заранее спасибо,
С уважением.
Вы можете использовать DOMXPath
для доступа к определенным свойствам по xpath.
$domx = new DOMXPath($doc);
$trans_id = $domx->evaluate("//input[contains(@name, 'trans_id')]");
В конце концов, проведите через объект, если необходимо
foreach ($trans_id as $id) {
echo "Value:" . $id->nodeValue;
}
С getAttribute()
, вам нужен атрибут value
, поэтому вам нужно будет использовать getAttribute()
, чтобы получить его. Я просто протестировал с помощью следующего кода, и он работает так, как ожидалось:
<?php
$result = '<input name="trans_id" value="Lk+Vz957skV845b7x2DX7iyR1FI=" type="hidden">';
$doc = new DOMDocument();
@$doc->loadHTML($result);
$domx = new DOMXPath($doc);
$trans_id = $domx->query('//input[@name="trans_id"]');
foreach ($trans_id as $id) {
echo "Value: " . $id->getAttribute('value');
}
печатает:
Value: Lk+Vz957skV845b7x2DX7iyR1FI=