当前位置: 首页 > 知识库问答 >
问题:

使用PHP阅读JSON帖子

方鸿振
2023-03-14

在发这个问题之前,我看了很多地方,所以如果它在另一个帖子上,我很抱歉,这只是我在这里的第二个问题,所以如果我没有正确地格式化这个问题,我很抱歉。

我创建了一个非常简单的web服务,它需要获取post值并返回一个JSON编码的数组。这一切都很好,直到我被告知需要发布内容类型为application/json的表单数据。从那以后,我不能从web服务返回任何值,这肯定与我如何过滤它们的post值有关。

基本上,在我的本地设置中,我创建了一个测试页面,它执行以下操作-

$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                                                                  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($curl, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data))                                                                       
);
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/');  // Set the url path we want to call
$result = curl_exec($curl);

//see the results
$json=json_decode($result,true);
curl_close($curl);
print_r($json);

在webservice上,我有这样的功能(我已经删除了一些功能)-

<?php

header('Content-type: application/json');

/* connect to the db */
$link = mysql_connect('localhost','root','root') or die('Cannot connect to the DB');
mysql_select_db('webservice',$link) or die('Cannot select the DB');

if(isset($_POST['action']) && $_POST['action'] == 'login') {
    $statusCode = array('statusCode'=>1, 'statusDescription'=>'Login Process - Fail');
    $posts[] = array('status'=>$statusCode);
    header('Content-type: application/json');
    echo json_encode($posts);

    /* disconnect from the db */
}
@mysql_close($link);

?>

基本上,我知道这是由于没有设置$_post值,但我找不到需要放什么来代替$_post。我尝试了json_decode($_post)、file_get_contents(“php://input”)和许多其他方法,但我有点蒙在鼓里。

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
  curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/');  
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));

在发布数据的页面上更新了php-

$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array

print_r(json_encode($input));

正如我所说的,至少我现在看到了一个响应,而之前它返回的是一个空白页

共有1个答案

蔡楚
2023-03-14

您的$_post为空。如果Web服务器希望看到JSON格式的数据,则需要读取原始输入,然后使用JSON decode对其进行解析。

你需要这样的东西:

$json = file_get_contents('php://input');
$obj = json_decode($json);

另外,测试JSON通信的代码也是错误的...

更新

$data_string = json_encode($data);

$ch = curl_init('http://webservice.local/');
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);
$result = json_decode($result);
var_dump($result);

另外,在Web服务页面上,应该删除头('content-type:application/json');中的一行。只能调用一次。

 类似资料:
  • 问题内容: 我有这个json数据: 使用php我如何发送此发布请求? 问题答案: 不 使用任何外部依赖项或库: $ response 是一个对象。可以像往常一样访问属性,例如 $ response- > … 其中 $ data 是包含 数据 的数组: 警告 :如果在php.ini 中将 allow_url_fopen 设置设置为 Off ,则此方法将无效。

  • 问题内容: 在发布此问题之前,我环顾了四周,因此如果在另一个帖子上我道歉,这只是我的第二个问题,因此如果我没有正确设置此问题的格式,则表示歉意。 我创建了一个非常简单的Web服务,该服务需要获取发布值并返回JSON编码的数组。一切都很好,直到被告知我需要使用内容类型为application / json的表单数据来发布。从那时起,我无法从Web服务返回任何值,这绝对与我过滤其后值有关。 基本上,在

  • 问题内容: 我有一个很大的PDF文件,它是建筑物的平面图。它具有用于所有办公家具的图层,包括座位位置的文本框。 我的目标是使用PHP读取此文件,在文档中搜索文本层,获取其内容和文件中的坐标。这样,我可以绘制出座位位置-> x / y坐标。 有没有办法通过PHP做到这一点?(如果需要的话,甚至可以是Ruby或Python) 问题答案: 签出FPDF(使用FPDI): http://www.fpdf.

  • 问题内容: Solr以以下JSON格式返回响应。 使用PHP读取student_id,student_name的简单方法是什么? 问题答案: 使用将其转换为一个对象。 然后使用来遍历“文档”。 然后,您可以使用和访问字段。

  • 问题内容: 我是JSON格式的新手,在阅读的教程中,我不太了解如何使用php进行解析。所以我有这个: 我想回显 坐标 和 reverseGeocode 。谁能请我朝正确的方向前进? 问题答案: 尝试跑步 您的示例JSON作为字符串在哪里。

  • 来自检查器( 已展开) 从jsoup.connect( 未展开) 共1个答案 匿名用户 相关问题 Javamail不阅读多部分/相关的电子邮件 阅读从GMail发送的邮件 阅读Kafka时Spark丢失99.9%的消息 从 ajax 调用中的服务器接收 HTML 并使用该 HTML 加载页面 阅读主题并使用reactor Kafka将消息批量写入RESTendpoint 在HtmlUnit驱动程序