0

我正在尝试使用 curl 编写一个简单的脚本,但问题是我需要收集在每个新的 POST 请求(onLoad())上生成的特殊密钥。通过创建一个新的 DOM 元素并使用 DOM 中的 GetElementById 函数获取值,可以很容易地传递问题,但是在这种情况下,在我想要返回值的特定标记中没有声明“id”。只有一个名字。

例子:

<input name="trans_id" value="Lk+Vz957skV845b7x2DX7iyR1FI=" type="hidden">

下面是我今天做的一个伪代码(最后一段是我需要帮助的地方):

<?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);
?>

但老实说,我无法从该函数中获得结果,因为它不存在。谷歌搜索只能帮助我删除结果以使用 getElementsByTagName ,在阅读 PHP 官方的文档后,它不能解决我的问题。

最后的注释:我不想包含任何 Javascripting,只包含纯 PHP。

提前谢谢你,
问候。

4

1 回答 1

1

您可以使用DOMXPath以通过 xpath 访问特定属性。

$domx = new DOMXPath($doc);
$trans_id = $domx->evaluate("//input[contains(@name, 'trans_id')]");

如有必要,最终遍历对象

foreach ($trans_id as $id) {
    echo "Value:" . $id->nodeValue;
}

再三考虑,您需要该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=
于 2013-11-10T20:48:34.130 回答