Библиотека скрепок для PHP – phpQuery?

Я ищу библиотеку PHP, которая позволяет мне обрывать веб-страницы и заботиться обо всех файлах cookie и предварительно заполнять формы стандартными значениями, вот что меня больше всего раздражает.

Я устал от необходимости сопоставлять каждый элемент ввода с xpath, и я бы хотел, чтобы что-то лучше существовало. Я столкнулся с phpQuery, но руководство не очень понятно, и я не могу узнать, как делать POST-запросы.

Кто-нибудь может мне помочь? Благодарю.

@Jonathan Fingland:

В примере, приведенном в руководстве для браузераGet (), мы имеем:

    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 : Будьте уверены, это не будет использоваться для рассылки спама.

    Related of "Библиотека скрепок для PHP – phpQuery?"

    См. 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, подпись метода одинакова (ссылка docs непосредственно на сайт 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 для такого материала в прошлом. Это часть среды тестирования SimpleTest, но вы можете использовать ее автономно.

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

    Для обработки HTTP-запросов, например, проверьте. Httpful , Unirest , Requests или Guzzle . В наши дни Gzzle особенно популярен, но, в конце концов, любая библиотека, которая лучше всего подходит для вас, по-прежнему зависит от личного вкуса.

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