- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在整个 stackoverflow 和 Google 上搜索我的问题的解决方案。
我已经使用 Zend Framework 创建了两个项目 - Project1
和 Project2
- 我想在其中一个上实现 Web 服务。这个想法是将一个 JSON 字符串发送到 Project1
并使用 POST 接收回一个包含与该变量关联的所有详细信息的 JSON。现在我已经在 Project2
上创建了一个 TestController:
public function indexAction(){
$uri = 'http://project1.com/WebService/data';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(CURLOPT_FOLLOWLOCATION => true),
);
$client = new Zend_Http_Client($uri, $config);
$request = $client->request('POST');
print_r($request->getBody());
exit();
}
上面的代码有效。它从 Project1
Controller 读取 dataAction
并为我提供任何回显的输出。但是当我尝试这个时:
public function indexAction(){
$uri = 'http://project1.com/WebService/data';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(CURLOPT_FOLLOWLOCATION => true),
);
$client = new Zend_Http_Client($uri, $config);
$data = array(
'userID' => 'TEST TEST',
'value' => 1,
'description' => 'ABCDEFG',
);
$request = $client->request('POST');
$json = json_encode($data);
$client->setRawData($json, 'application/json')->request('POST');
exit();
}
在服务器端,当我尝试在 dataAction
中显示时:
public function dataAction(){
var_dump($this->getRequest()->getParam('var-name'));
var_dump($_POST);
die();
}
我得到这样的输出:NULL array(0) { } ....我在客户端尝试时得到相同的输出。还要提一下..我也尝试打开 php://input 文件但得到一个空字符串...
我错过了什么???从早上开始,我一直在搜索它,但没有找到解决方案,这让我很沮丧。
预先感谢您的回复。
最佳答案
这是你所缺少的:
$json = json_encode($data);
$client->setRawData($json, 'application/json')->request('POST');
发送 POST 请求,但 POST 正文中的数据不是 url 编码的字符串,而是原始 JSON。
调用 $this->getRequest()->getParam('foo')
查看 PHP superglobals $_GET
和 $_POST
它将不包含任何 JSON 参数。它将为空的原因是因为 PHP 无法解析 POST 数据,因为它是 JSON 而不是 HTTP url 编码的内容。
如果您想在 POST 主体中接收 JSON 数据,解决方案是在 dataAction
中使用类似的东西。
$post = $this->getRequest()->getRawBody();
try {
$json = Zend_Json::decode($post);
// now access parameters from $json array
} catch (Zend_Json_Exception $ex) {
echo "Failed to decode request, POST did not contain valid JSON.";
}
编辑:这是您可以搞乱的完整代码。
public function requestAction()
{
// CHANGE THIS
$uri = 'http://playground/zendapp/public/index/data';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(CURLOPT_FOLLOWLOCATION => true),
);
$client = new Zend_Http_Client($uri, $config);
$data = array(
'userID' => 'TEST TEST',
'value' => 1,
'description' => 'ABCDEFG',
);
$json = json_encode($data);
$resp = $client->setRawData($json, 'application/json')->request('POST');
var_dump($resp->getBody());
exit();
}
public function dataAction()
{
$post = $this->getRequest()->getRawBody();
try {
$json = Zend_Json::decode($post);
print_r($json);
} catch (Exception $ex) {
echo "failed to decode json";
}
exit;
}
关于php - Zend_HTTP_Client 不会让我发布任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571471/
嘿,我正在使用 Zend_Http_Client 调用服务器中的 php 服务,但我遇到了与超时相关的异常: 2012-05-30T13:47:26+02:00 INFO(6): LeomobileM
我一直在整个 stackoverflow 和 Google 上搜索我的问题的解决方案。 我已经使用 Zend Framework 创建了两个项目 - Project1 和 Project2 - 我想在
我正在尝试通过PUT方法更新我的记录 $client = new Zend_Http_Client(); $client->setMethod(Zend_Http_Client::PUT); $cli
我有 Zend Framework 1.12 项目,还有 PHP 5.5.3 和 nginx 1.2.7 + php-fpm 安装在 Ubuntu 10.04 服务器上。 我收到以下异常 消息:无法连
我正在使用以下代码访问受用户名/密码登录保护的页面。 //Fetch homepage $client = new Zend_Http_Client(); $client->setCook
我正在尝试使用 Zend_Http_Client 和 POST 将数据发送到 Google Analytic 的收集器。我有一个数组 $postParams,其中包括我的跟踪 ID、cid 和命中类型
我需要创建授权脚本。必须保存 Cookie 以供日后在未经授权的情况下访问页面。谁能给我工作示例? 最佳答案 首先,您必须执行初始请求以从服务器获取 cookie。在响应中,您将服务器发送的 cook
我正在尝试使用 Zend_Http_Client 在需要身份验证的站点上发出简单的发布请求。一切似乎都是正确的,但我仍然收到 You are not authorized to view this p
我使用以下代码成功调用了 REST API $client = new Zend_Http_Client(); $client->setMethod(Zend_Http_Client::POST);
我想使用 Zend_Http_Client 访问新的 Twitter Stream API。问题是,对该网页 ( http://stream.twitter.com/1/statuses/sample
我正在使用 Zend_Http_Client 请求 URL,HTTP 客户端的超时设置为 10。 $config = array( 'adapter' => 'Zend_Http_Clie
嗨,我正在将 curl 调用重构为 Zend_Http_Client 调用。这将向带有给定文件的 CouchDB 数据库发送 PUT 请求,并为 _attachement 设置正确的 Content-
我需要调试我的 Zend_Http_Client 代码,以便我确信我将所有正确的 POST 字段和 header 发送到我的服务器。如何输出将发送的 POST 字段列表,甚至整个 HTTP 命令是什么
我一直在尝试使用客户端证书在我的客户端应用程序和服务器应用程序之间建立安全通信。我已经在我的 Apache Web 服务器和我的浏览器中设置了配置,只是为了确保它能正常工作。 我使用的是 zend f
在 PHP curl 中有两个函数用于忽略所有 SSL 错误(无效证书、自签名、过期等): curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_
我想发送一个带有 url 重定向到请求页面的 post 请求。 Jest 认为请求页面当前用于处理提交表单。 我在请求页面尝试了以下代码。 setParameterPost(array('user'
我正在尝试使用以下命令将 json 对象作为 POST 命令发送: $uri = "http://amore-luce.com/product_create"; $product =
我正在使用 Zend_HTTP_Client 向服务器发送 HTTP 请求并获得响应。我向其发送请求的服务器是 HTTPS Web 服务器。目前,一个往返请求大约需要 10-12 秒。我知道开销可能是
我正在使用 Zend_Http_Client 将一组数据发布到我运行 PHP 的服务器。但是,服务器需要 myField[] 形式的数据,即我有一组复选框,用户可以选中多个。我当前的代码是: f
我想解析各种 ssl/https 站点。 例如我想要 https://microsoft.de 的内容,但它不起作用。出现以下错误: Fatal error: Uncaught excepti
我是一名优秀的程序员,十分优秀!