【发布时间】:2013-07-23 07:58:18
【问题描述】:
显然,我在搜索中没有使用正确的关键字,或者我不理解其他人在博客或论坛中写的内容,等等。
寻找有关在两台服务器之间传递数据的信息。数据最好包含在 JSON 数组中。 如果您知道有人写了一个完全包含此内容的博客,我真的很想有机会阅读它。否则你能提供一些想法吗?
更详细: 当用户访问一个页面时,一个 PHP 函数将被调用,一些数据将被“打包”在一个 JSON 数组中,然后是一个 POST 命令到另一个服务器。第二台服务器收到 POST 后会做一些处理,然后“打包”一些数据并以 JSON 数组的形式返回。然后将向用户显示结果。
通过以下内容,我收到了 HTTP 200 响应。只是没有数据。
站点 1:
$data_string = json_encode(array('user_id'=>123));
$ch = curl_init('http://site2.dev/retrieve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
));
$result = curl_exec($ch);
$status = curl_getinfo($ch);
curl_close($ch);
$result = json_decode($result);
站点 2:
public function retrieve() {
return json_encode(array('some'=>'456'));
}
选择 Json 数组是因为它可以加密,是的,HTTPS 将在最终环境中使用。
两台服务器都将 Laravel 4 作为 PHP 框架。
感谢您的想法和cmets。
【问题讨论】:
-
我没有看到任何明显的错误,只是我认为您不应该自己设置 Content-Length。你的路线是什么样的?
-
站点 1 routes.php Route::get('/','AccountController@getHome');和站点 2 routes.php Route::get('retrieve','ProcessController@retrieve');
-
您的站点 2 路由是
GET,但您从站点 1 发送POST。 -
谢谢@takteek。我确实将其更新为 Route::post('retrieve','ProcessController@retrieve');还是一样的反应。 HTTP 代码 200 且未返回任何数据。
-
您可以自己发送 Content-Length,但要使值准确则很棘手。它可能因编码、压缩的使用等而有所不同。最好删除这部分代码并让网络浏览器在需要时自动添加它。
标签: php json post laravel laravel-4