在 ZF2 中实现卷曲
Implementing curl in ZF2
我正在尝试通过 curl
与两个 zf2
应用程序建立通信。所需的响应在 xml
中。到目前为止,我可以建立连接并返回 xml
作为响应。
问题
问题是,我无法迭代 xml response
。每当我 var_dump 并查看 $response->getContent
的源代码时,我都会得到
string(142) "<?xml version="1.0" encoding="UTF-8"?>
<myxml>
<login>
<status>success</status>
<Err>None</Err>
</login>
</myxml>
"
当我简单地 var_dump
我的 $response
时,我得到一个 object(Zend\Http\Response)#440
。
simplexml_load_string($response->getContent())
给我一个空白页。
另外print $data->asXML()
给我Call to a member function asXML() on a non-object
error.What我这里做错了吗?
Curl 请求操作
$request = new \Zend\Http\Request();
$request->getHeaders()->addHeaders([
'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'
]);
$request->setUri('http://localhost/app1/myaction');
$request->setMethod('POST'); //uncomment this if the POST is used
$request->getPost()->set('curl', 'true');
$request->getPost()->set('email', 'me@gmail.com');
$request->getPost()->set('password', '2014');
$client = new Client;
$client->setAdapter("Zend\Http\Client\Adapter\Curl");
$response = $client->dispatch($request);
var_dump($response);//exit;
//$response = simplexml_load_string($response->getContent());
//echo $response;exit;
return $response;
卷曲响应动作
$php_array=array(
'login'=>array(
'status'=>'failed','Err'=>'Unauthorised Access'
)
);
$Array2XML=new \xmlconverter\Arraytoxml;
$xml = $Array2XML->createXML('myxml', $php_array);
$xml = $xml->saveXML();
//echo $xml;exit;
$response = new \Zend\Http\Response();
$response->getHeaders()->addHeaderLine('Content-Type', 'text/xml; charset=utf-8');
$response->setContent($xml);
return $response;
Array2XML
可以找到here
有什么想法吗?
when I simply var_dump my $response,I get an object(Zend\Http\Response)#440
这是正确的,它告诉你 $response
的类型。
simplexml_load_string($response->getContent()) gives me a blank page.
这是正确的,因为尽管此函数可以 return 一个可表示为空字符串的值,但它不会自行创建任何输出,因此空白页是意料之中的。
Any ideas?
首先,您应该针对您的问题制定适当的问题陈述。到目前为止你所说的一切都是意料之中的,所以你的问题充其量也不清楚。
其次,您需要进行适当的错误处理并进行一些安全编程:
$buffer = $response->getContent();
if (!is_string($buffer) || !strlen($buffer) || $buffer[0] !== '<') {
throw new RuntimeException('Need XML string, got %s', var_export($buffer, 1));
}
$xml = simplexml_load_string($buffer);
if (false === $xml) {
throw new RuntimeException('Unable to parse response string as XML');
}
即:对于您获得的每个参数,对其进行验证。对于您收到的每个函数或方法结果,请检查 post 条件。在调用函数或方法之前,检查每个参数的前置条件。
将错误记录到文件并处理未捕获的异常。
作为一个额外的想法:放弃对数组的使用 XML 功能,并将其替换为维护的库。在您的情况下,使用您自己的 SimpleXML 来创建 XML.
可能更容易
我正在尝试通过 curl
与两个 zf2
应用程序建立通信。所需的响应在 xml
中。到目前为止,我可以建立连接并返回 xml
作为响应。
问题
问题是,我无法迭代 xml response
。每当我 var_dump 并查看 $response->getContent
的源代码时,我都会得到
string(142) "<?xml version="1.0" encoding="UTF-8"?>
<myxml>
<login>
<status>success</status>
<Err>None</Err>
</login>
</myxml>
"
当我简单地 var_dump
我的 $response
时,我得到一个 object(Zend\Http\Response)#440
。
simplexml_load_string($response->getContent())
给我一个空白页。
另外print $data->asXML()
给我Call to a member function asXML() on a non-object
error.What我这里做错了吗?
Curl 请求操作
$request = new \Zend\Http\Request();
$request->getHeaders()->addHeaders([
'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'
]);
$request->setUri('http://localhost/app1/myaction');
$request->setMethod('POST'); //uncomment this if the POST is used
$request->getPost()->set('curl', 'true');
$request->getPost()->set('email', 'me@gmail.com');
$request->getPost()->set('password', '2014');
$client = new Client;
$client->setAdapter("Zend\Http\Client\Adapter\Curl");
$response = $client->dispatch($request);
var_dump($response);//exit;
//$response = simplexml_load_string($response->getContent());
//echo $response;exit;
return $response;
卷曲响应动作
$php_array=array(
'login'=>array(
'status'=>'failed','Err'=>'Unauthorised Access'
)
);
$Array2XML=new \xmlconverter\Arraytoxml;
$xml = $Array2XML->createXML('myxml', $php_array);
$xml = $xml->saveXML();
//echo $xml;exit;
$response = new \Zend\Http\Response();
$response->getHeaders()->addHeaderLine('Content-Type', 'text/xml; charset=utf-8');
$response->setContent($xml);
return $response;
Array2XML
可以找到here
有什么想法吗?
when I simply var_dump my $response,I get an object(Zend\Http\Response)#440
这是正确的,它告诉你 $response
的类型。
simplexml_load_string($response->getContent()) gives me a blank page.
这是正确的,因为尽管此函数可以 return 一个可表示为空字符串的值,但它不会自行创建任何输出,因此空白页是意料之中的。
Any ideas?
首先,您应该针对您的问题制定适当的问题陈述。到目前为止你所说的一切都是意料之中的,所以你的问题充其量也不清楚。
其次,您需要进行适当的错误处理并进行一些安全编程:
$buffer = $response->getContent();
if (!is_string($buffer) || !strlen($buffer) || $buffer[0] !== '<') {
throw new RuntimeException('Need XML string, got %s', var_export($buffer, 1));
}
$xml = simplexml_load_string($buffer);
if (false === $xml) {
throw new RuntimeException('Unable to parse response string as XML');
}
即:对于您获得的每个参数,对其进行验证。对于您收到的每个函数或方法结果,请检查 post 条件。在调用函数或方法之前,检查每个参数的前置条件。
将错误记录到文件并处理未捕获的异常。
作为一个额外的想法:放弃对数组的使用 XML 功能,并将其替换为维护的库。在您的情况下,使用您自己的 SimpleXML 来创建 XML.
可能更容易