当前位置: 首页 > 面试题库 >

使用PHP读取JSON POST

田柏
2023-03-14
问题内容

在发布此问题之前,我环顾了四周,因此如果在另一个帖子上我道歉,这只是我的第二个问题,因此如果我没有正确设置此问题的格式,则表示歉意。

我创建了一个非常简单的Web服务,该服务需要获取发布值并返回JSON编码的数组。一切都很好,直到被告知我需要使用内容类型为application /
json的表单数据来发布。从那时起,我无法从Web服务返回任何值,这绝对与我过滤其后值有关。

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

$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);

在网络服务上,我有这个(我去除了一些功能)-

<?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”)和许多其他方式,但是我在黑暗中拍摄了一下。

任何帮助将不胜感激。

谢谢,史蒂夫

感谢Michael的帮助,这是一个明确的进步,当我回应该帖子时,我现在至少得到了回应…即使它为null

更新的CURL-

  $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));

正如我所说,至少我现在看到一个回应,当时它在返回空白页之前


问题答案:

你有空$_POST。如果您的网络服务器希望以json格式查看数据,则需要读取原始输入,然后使用JSON解码对其进行解析。

您需要这样的东西:

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

另外,您使用错误的代码来测试JSON通信…

CURLOPT_POSTFIELDS告诉curl您将参数编码为application/x-www-form- urlencoded。您需要在这里使用JSON字符串。

更新

您的测试页php代码应如下所示:

$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服务页面上,您应该删除其中一行header('Content-type: application/json');。它只能被调用一次。



 类似资料:
  • 问题内容: 我正在尝试使用PHP读取mp4文件,而我现在正在做的是: 但是通过这种方式,我无法跳过甚至返回,直到视频未100%加载。当然,当我直接从文件(video.mp4)中读取内容时,一切都会顺利进行。 谢谢。 问题答案: 您需要自己在PHP中实现跳过功能。这是一个代码片段,可以完成此操作。 更高的性能 请注意,这不是最有效的方法,因为整个文件都需要通过PHP进行处理,因此您只需要尝试如何进行

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

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

  • 问题内容: 如何从带有最少循环的json数据中获取以下json数据的所有pid和styles属性 谢谢 问题答案:

  • 我得到了他们每个人的错误: 警告:fopen(../top.txt)[function.fopen]:无法打开流:没有这样的文件或目录 警告:文件大小()[function.filesize]:统计失败…/top.txt 警告:fread():提供的参数不是有效的流资源 警告:fclose():提供的参数不是有效的流资源 所有文件和文件夹中的CHMOD,设置为777 服务器上存在所有文件 PHP5

  • 问题内容: 我正在建立一个供人们上传PHP中的.tar(和.tar.gz,.tar.bz2,.zip等)文件的系统。上载文件是可以的,但是在上载档案之后,我想列出档案中包含的文件。 有人可以推荐一个可以读取文件存档的优秀PHP库吗? 我在Pear上找到了File_Archive,但是几年来没有更新。ZipArchive非常适合.zip文件,但是我需要一些可以处理更多文件类型的文件。 更新 我在RH