我正在寻找一个PHP库,该库使我可以删除网页并处理所有cookie,并使用默认值预填充表单,这是最让我烦恼的地方。

我厌倦了必须将每个输入元素与xpath匹配的情况,如果有更好的东西,我将很乐意。我遇到过 phpQuery ,但是手册并不十分清楚,我也找不到如何发出POST请求的方法。

有人能帮我吗?谢谢。

@乔纳森·芬兰(Jonathan Fingland):

在手册中为browserGet()提供的示例中,我们有:

require_once('phpQuery/phpQuery.php');

phpQuery::browserGet('http://google.com/', 'success1');

function success1($browser)
{
    $browser->WebBrowser('success2')
    ->find('input[name=q]')->val('search phrase')
    ->parents('form')
    ->submit();
}

function success2($browser)
{
    echo $browser;
}

我想所有其他字段都已废弃,并在GET请求中发送回去,我想对phpQuery::browserPost()方法执行相同的操作,但我不知道该怎么做。我尝试抓取的表单具有输入 token ,如果phpQuery能足够聪明地抓取 token 并让我更改其他字段(在本例中为用户名和密码),并希望通过POST提交,我将很高兴。

PS :放心,这是而不是用于垃圾邮件。

最佳答案

参见http://code.google.com/p/phpquery/wiki/Ajax,尤其是:
phpQuery::post($url, $data, $callback, $type)

# data Object, String将数据参数定义为Object或String。 POST请求应该可以使用查询字符串格式进行,例如:

$data = "username=Jon&password=123456";
$url = "http://www.mysite.com/login.php";
phpQuery::post($url, $data, $callback, $type)

由于phpQuery是jQuery端口,因此方法签名是相同的(文档直接链接到jquery站点-http://docs.jquery.com/Ajax/jQuery.post)

编辑

两件事情:

还有一个 phpQuery::browserPost 函数可能会更好地满足您的需求。

但是,还请注意,仅在 submit() or click() 方法上调用success2回调,因此您可以在此之前填写所有表单字段。

例如
require_once('phpQuery/phpQuery.php');
phpQuery::browserGet('http://www.mysite.com/login.php', 'success1');
function success1($browser) {
  $handle = $browser
    ->WebBrowser('success2');
  $handle
    ->find('input[name=username]')
      ->val('Jon');
  $handle
    ->find('input[name=password]')
      ->val('123456');
      ->parents('form')
        ->submit();
}
function success2($browser) {
  print $browser;
}

(请注意,这尚未经过测试,但应该可以使用)

关于php - 用于PHP的报废库-phpQuery?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1644669/

10-09 13:54