我在寻找一个PHP库,让我放弃的网页大约需要所有的饼干和预填充用默认值形式的照顾,这就是最烦扰我。
我厌倦了使用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一切submiting。
PS:请放心,这是不会被用于发送垃圾邮件。
见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在过去这样的东西。 这是SimpleTest的测试框架的一部分,但是你可以用它单独使用。
I would use a dedicated library for parsing HTML files and a dedicated library for processing HTTP requests. Using the same library for both seems like a bad idea, IMO.
For processing HTTP requests, check out eg. Httpful
, Unirest
, Requests
or Guzzle
. Guzzle is especially popular these days, but in the end, whichever library works best for you is still a matter of personal taste.
For parsing HTML files I would recommend a library that I wrote myself : DOM-Query
. It allows you to (1) load an HTML file and then (2) select or change parts of your HTML pretty much the same way you'd do it if you'd be using jQuery in a frontend app.