我设法使用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);
它产生如下输出:
object(Symfony \ Component \ DomCrawler \ Crawler)#285(4){ [ “URI”:保护] => string(36)“http://domain.mg/usergroup/list” [ “defaultNamespacePrefix”: “的Symfony \元器件\ DomCrawler \履带”:私人] => string(7)“default” [ “命名空间”: “的Symfony \元器件\ DomCrawler \履带”:私人] => array(0){} [“storage”:“SplObjectStorage”:private] => array(1){ [ “0000000075faaa10000000001af55ef8”] => array(2){[“obj”] => object(DOMElement)#241(17){[“tagName”] => string(4)“html” [ “schemaTypeInfo”] => NULL [“nodeName”] => string(4)“html” [ “的nodeValue”] => string(438)“[{”id“:1,”group_name“:”Compte 主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL 倾倒 comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不 注释 “ ”group_desc“:” AUTRES 采用\ u00e9s “ ”group_level“:6},{ ”ID“:41, ”GROUP_NAME“: ”INVIT \ u00e9“, ”group_desc“: ”客人“, ”group_level“:2}]” [ “节点类型”] => int(1)[“parentNode”] => string(22)“(对象值 省略)“[”childNodes“] => string(22)”(省略对象值)“ [ “则firstChild”] => string(22)“(省略对象值)”[“lastChild”] => string(22)“(省略对象值)”[“previousSibling”] =>串(22) “(省略对象值)”[“attributes”] => string(22)“(对象值 省略)“[”ownerDocument“] => string(22)”(省略对象值)“ [ “的namespaceURI”] => NULL [“prefix”] => string(0)“”[“localName”] => string(4)“html”[“baseURI”] => NULL [“textContent”] =>串(438) “[{” ID “:1,” GROUP_NAME “:” 孔特 主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL 倾倒 comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不 注释 “ ”group_desc“:” AUTRES 采用\ u00e9s “ ”group_level“:6},{ ”ID“:41, ”GROUP_NAME“: ”INVIT \ u00e9“, ”group_desc“: ”客人“, ”group_level“:2}]” } [“inf”] => NULL}}}
我偶然发现在$crawler
对象中提取/转换JSON的内部表示。怎么可能这样做?
答案 0 :(得分: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”:“孔特 主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL 倾倒 comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不 注释 “ ”group_desc“:” AUTRES 采用\ u00e9s”, “group_level”:6},{ “ID”:41, “GROUP_NAME”: “INVIT \ u00e9”, “group_desc”: “客人”, “group_level”:2}]
Goutte很好地管理了复杂(Laravel | crsf机制)登录过程,但我不喜欢使用html()
来删除JSON字符串。
使用return ($crawler->text())
获得相同的结果对我的意见更加“中立”。
答案 1 :(得分:0)
我不确定你想要用JSON做什么,但将JSON字符串转换为数组非常简单:
$data = json_decode($jsonString);