0

我设法使用Goutte Laravel 4成功访问了远程 JSON 资源:

$client = Goutte::getNewClient();

//*
$crawler = $client->request('GET', 'http://domain.mg/admin');

$form = $crawler->selectButton('Login')->form();
$crawler = $client->submit($form, array('username' => 'username', 'password' => 'password'));

//*/

$crawler = $client->request('GET', 'http://domain.mg/usergroup/list'); // Yields JSON Response

return dd($crawler);

它产生如下输出:

对象(Symfony\Component\DomCrawler\Crawler)#285 (4) { ["uri":protected]=> string(36) " http://domain.mg/usergroup/list" ["defaultNamespacePrefix":"Symfony\Component\DomCrawler\Crawler":private]=> 字符串(7) "default" ["namespaces":"Symfony\Component\DomCrawler\Crawler":private]=> 数组(0) { } ["storage":"SplObjectStorage":private]=> 数组(1) { ["0000000075faaa10000000001af55ef8"]=> 数组(2) { ["obj"]=> 对象(DOMElement)#241 (17) { [ "tagName"]=> string(4) "html" ["schemaTypeInfo"]=> NULL ["nodeName"]=> string(4) "html" ["nodeValue"]=> string(438) "[{" id":1,"group_name":"Compte principal","group_desc":"Administrateur","group_level":9},{"id":2,"group_name":"Profil pour les comptables","group_desc":"Comptables","group_level":2},{"id":3,"group_name":"Validateur d'op\u00e9ration","group_desc":"Superviseur"," group_level":9},{"id":18,"group_name":"No Comment","group_desc":"Autres 雇用\u00e9s","group_level":6},{"id":41,"group_name" :"Invit\u00e9","group_desc":"Guest","group_level":2}]" ["nodeType"]=> int(1) ["parentNode"]=> string(22) "(对象值省略)" ["childNodes"]=> string(22) "(省略对象值)" ["firstChild"]=> string(22) "(省略对象值)" ["lastChild"]=> string(22) "(省略对象值)" ["previousSibling"]=> string(22) "(省略对象值)" ["attributes"]=> string(22) "(省略对象值)" ["ownerDocument"]=> string(22) "(省略对象值)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(4) "html" ["baseURI"]=> NULL ["textContent"]=> string(438) "[{"id":1,"group_name":"Compte principal","group_desc":"Administrateur","group_level ":9},{"id":2,"group_name":"Profil pour les comptables","group_desc":"Comptables","group_level":2},{"id":3,"group_name":"Validateur d'op\u00e9ration","group_desc":"Superviseur","group_level":9},{"id":18,"group_name":"No Comment","group_desc":"Autres 雇用\u00e9s","group_level":6},{"id":41,"group_name":"邀请\u00e9","group_desc":"Guest","group_level":2}]" } ["inf"] => 空 } } }"group_level":2}]" } ["inf"]=> NULL } } }"group_level":2}]" } ["inf"]=> NULL } } }

我偶然发现提取/转换对象内 JSON 的内部表示$crawler。那怎么可能呢?

4

2 回答 2

1

深入研究类Symfony\Component\DomCrawler\Crawler文档,我发现

public string html()

    Returns the first node of the list as HTML.

    Return Value

    string  The node html

正如我预期的那样工作。

转化return dd($crawler)return ($crawler->html())收益率:

[{"id":1,"group_name":"Compte principal","group_desc":"Administrateur","group_level":9},{"id":2,"group_name":"Profil pour les comptables", "group_desc":"Comptables","group_level":2},{"id":3,"group_name":"Validateur d'op\u00e9ration","group_desc":"Superviseur","group_level":9}, {"id":18,"group_name":"No Comment","group_desc":"Autres雇\u00e9s","group_level":6},{"id":41,"group_name":"邀请\u00e9" ,"group_desc":"Guest","group_level":2}]

结论

Goutte 很好地管理了复杂的(Laravel | crsf 机制)登录过程,但我不喜欢使用html().

我认为使用return ($crawler->text())获得相同的结果更“中立”。

于 2014-06-14T11:48:35.270 回答
0

我不确定你想用 JSON 做什么,但是将 JSON 字符串转换为数组相当简单:

$data = json_decode($jsonString);
于 2014-06-13T20:12:24.823 回答