Библиотека очистки для PHP-phpQuery?

Я ищу библиотеку 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 (), но я не знаю, как это сделать. Форма, которую я пытаюсь очистить, имеет входной токен, и мне бы хотелось, чтобы phpQuery был достаточно умен, чтобы очистить токен и просто позволить мне изменить другие поля (в этом случае имя пользователя и пароль), отправляя через POST все.

PS: будьте уверены, это не будет использоваться для спама.

3 ответов


посмотреть http://code.google.com/p/phpquery/wiki/Ajax в частности:

phpQuery::post($url, $data, $callback, $type)

и

# data 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 функция, которая может удовлетворить ваши потребности лучше.

однако также обратите внимание, что обратный вызов success2 вызывается только на submit() или click() методы, чтобы вы могли заполнить все поля формы до этого.

например

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;
}

(обратите внимание, что это не был протестирован, но должны работы)


Я использовал SimpleTest по ScriptableBrowser для таких вещей в прошлом. Это часть самой простой платформы тестирования, но вы можете использовать ее автономно.


Я бы использовал выделенную библиотеку для разбора HTML-файлов и выделенную библиотеку для обработки HTTP-запросов. Использование одной и той же библиотеки для обоих кажется плохой идеей, ИМО.

для обработки HTTP-запросов проверьте, например. Httpful, Unirest, Requests или Guzzle. Жрать особенно популярно в наши дни, но в конце концов, какая бы библиотека работает лучше всего для вас, это все еще вопрос личного вкуса.

для разбора HTML-файлов я бы рекомендовал библиотеку, которую я написал сам:DOM-Query. Он позволяет (1) загрузить HTML-файл, а затем (2) выбрать или изменить части вашего HTML почти так же, как вы это сделали бы, если бы вы использовали jQuery в интерфейсном приложении.