php - 如何从 asp.net 接收 JSON POST 数据到 php?
问题描述
我正在尝试为我的 php 网站构建一个 API,并且该 API 正在使用 asp.net 网站将数据插入到我的 php MySql 网站。我已经和邮递员核对过了,它正在工作。但是在从 asp.net 访问时,它只是获取空值而已。使用来自 asp.net 的 JSON 发布的数据是
来自asp.net的JSON POST数组
string reqJson = "{\"user_id\":\"" + user_id + "\",\"name\":\"" + name + "\",\"branch\": " + branch + "," + " \"agency\" : \"" + agency + "\"}";
var request = (HttpWebRequest)WebRequest.Create(Url);
var data = Encoding.UTF8.GetBytes(reqJson);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
request.KeepAlive = true;
request.Accept = "application/json";
request.Headers.Add("Accept-Encoding", "application/gzip");
Stream dataStream = request.GetRequestStream();
dataStream.Write(data, 0, data.Length);
dataStream.Close();
HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
var rsp = webResponse.GetResponseStream();
if (rsp == null)
{
}
using (System.IO.StreamReader rdstrm = new System.IO.StreamReader(webResponse.GetResponseStream()))
{
responseString = rdstrm.ReadToEnd().ToString();
}
这是请求的 JSON
{"AllowAutoRedirect":true,"AllowWriteStreamBuffering":true,"AllowReadStreamBuffering":false,"HaveResponse":false,"KeepAlive":true,"Pipelined":true,"PreAuthenticate":false,"UnsafeAuthenticatedConnectionSharing":false,"SendChunked":false,"AutomaticDecompression":0,"MaximumResponseHeadersLength":64,"ClientCertificates":[],"CookieContainer":null,"SupportsCookieContainer":true,"RequestUri":"http://localhost:9080/api/ucd.php","ContentLength":81,"Timeout":100000,"ReadWriteTimeout":300000,"ContinueTimeout":350,"Address":"http://localhost:9080/api/ucd.php","ContinueDelegate":null,"ServicePoint":{"BindIPEndPointDelegate":null,"ConnectionLeaseTimeout":-1,"Address":"http://localhost:9080/api/ucd.php","MaxIdleTime":100000,"UseNagleAlgorithm":true,"ReceiveBufferSize":-1,"Expect100Continue":true,"IdleSince":"\/Date(1542637743629)\/","ProtocolVersion":{"Major":1,"Minor":1,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1},"ConnectionName":"http","ConnectionLimit":2147483647,"CurrentConnections":0,"Certificate":null,"ClientCertificate":null,"SupportsPipelining":true},"Host":"localhost","MaximumAutomaticRedirections":50,"Method":"POST","Credentials":null,"UseDefaultCredentials":false,"ConnectionGroupName":null,"Headers":["Content-Type","Accept","Accept-Encoding"],"Proxy":{"Credentials":null},"ProtocolVersion":{"Major":1,"Minor":1,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1},"ContentType":"application/json","MediaType":null,"TransferEncoding":null,"Connection":null,"Accept":"application/json","Referer":null,"UserAgent":null,"Expect":null,"IfModifiedSince":"\/Date(-62135596800000)\/","Date":"\/Date(-62135596800000)\/","ServerCertificateValidationCallback":null,"CreatorInstance":{},"CachePolicy":{"Level":1},"AuthenticationLevel":1,"ImpersonationLevel":4}
以上是在发布 JSON 请求时自动生成的
接收 PHP代码是
<?php
include_once('config.php');
if($_SERVER['REQUEST_METHOD'] == "POST"){
//Posting the data here
$user_id= $_POST['user_id'];
$user_name= $_POST['name'];
$branch= $_POST['branch'];
$agency= $_POST['agency'];
//This below method also tried but the same showing.
/*$portal = isset($_POST['portal']) ? mysqli_real_escape_string($_POST['portal']) : "";
$pax_name = isset($_POST['pax_name']) ? mysqli_real_escape_string($_POST['pax_name']) : "";
$ticket_no = isset($_POST['ticket_no']) ? mysqli_real_escape_string($_POST['ticket_no']) : "";
$adtorch = isset($_POST['adtorch']) ? mysqli_real_escape_string($_POST['adtorch']) : "";
$airline_code = isset($_POST['airline_code']) ? mysqli_real_escape_string($_POST['airline_code']) : "";*/
// Insert data into data base
$sql = "INSERT INTO portal_users (pu_user_id, pu_username, pu_branch, pu_agency) VALUES ('" .$user_id."','".$user_name."','".$branch."','".$agency."');";
$qur = $conn->query($sql);
if($qur){
$json = array("status" => 1, "msg" => $user_id);
}else{
$json = array("status" => 0, "msg" => "Error adding user!");
}
}else{
$json = array("status" => 0, "msg" => "Request method not accepted");
}
mysqli_close($conn);
/* Output header */
header('Content-type: application/json');
echo json_encode($json);
?>
收到过账价值有什么问题吗?这是一个json请求。所以我想使用解码方法?我是初学者,所以我不知道解码。
我也试过这个方法
$r_val = file_get_contents("php://input");
$r_data = json_decode($r_val, true);
$user_id= $r_data ['user_id'];
$user_name= $r_data ['name'];
$branch= $r_data ['branch'];
$agency= $r_data ['agency'];
解决方案
您需要像这样接收 json 值-
$r_val = file_get_contents("php://input");
$r_data = json_decode($r_val, true);
这里 $r_data 是一个数组。您将在此数组中获得预期值,如下所示 -
$user_id= $r_data ['user_id'];
$user_name= $r_data ['name'];
$branch= $r_data ['branch'];
$agency= $r_data ['agency'];
推荐阅读
- php - 如何为 WordPress 插件或主题添加自动更新功能
- pandas - Pandas 中的 EWM 用于时间序列转换
- node.js - 如何使用服务帐户密钥文件调用受限的 firebase 函数?
- c - 无法从 Turbo C 中读取文件
- python - 我如何将图像用作按钮功能(Tkinter)
- python - 打印字典时出现KeyError?
- r - 如何在 r 中跨时间绘制多个组?
- python - Tensorflow:将张量列设置为无穷大
- swift - 如何通过访问 API 端点来解码 JSON 数据?
- informatica - Informatica 过滤器转换条件为 TRUE,没有任何文件