使用来自C#的HTTP请求将NULL JSON发布到PHP服务器上 [英] NULL JSON posted onto PHP server using HTTP requests from C#
问题描述
我正在尝试使用HTTP响应方法在PHP页面上发布JSON字符串,如下所示:
using System;
使用System.Collections.Generic;使用System.ComponentModel
;
使用System.Data;使用System.Drawing
;
使用System.Linq;
使用System.Text;
使用System.Windows.Forms;
使用System.Net;
使用System.IO;
使用System.Web.Script.Serialization;
使用System.Web;
名称空间http_requests
{
公共部分类Form1:表格
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender,EventArgs e)
{
// var httpWebRequest =(HttpWebRequest)WebRequest.Create(http:// localhost /abc/products.php);
//httpWebRequest.ContentType =application / json;
//httpWebRequest.Method =POST;
//使用(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
// {
// string json = new JavaScriptSerializer()。Serialize(new
// {
//用户=Foo,
//密码=Baz
//});
// streamWriter.Write(json);
// streamWriter.Flush();
// streamWriter.Close();
// var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();
// using(var streamReader = new StreamReader(httpResponse.GetResponseStream()))
// {
// var result = streamReader.ReadToEnd();
//}
//}
HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create(http://localhost/ABC/products.php) ;
request.Method = WebRequestMethods.Http.Post;
string DataToPost = new JavaScriptSerializer()。Serialize(new
{
user =Foo,
password =Baz
});
byte [] bytes = Encoding.UTF8.GetBytes(DataToPost);
string byteString = Encoding.UTF8.GetString(bytes);
Stream os = null;
// string postData =firstName =+ HttpUtility.UrlEncode(p.firstName)+
request.ContentLength = bytes.Length;
request.ContentType =application / x-www-form-urlencoded;
os = request.GetRequestStream();
os.Write(bytes,0,bytes.Length);
// StreamWriter writer = new StreamWriter(request.GetRequestStream());
//writer.Write(DataToPost);
//writer.Close();
HttpWebResponse response =(HttpWebResponse)request.GetResponse();
// StreamReader reader = new StreamReader(response.GetResponseStream());
using(var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
richTextBox1.AppendText(R:+ result);
Console.WriteLine(streamReader.ReadToEnd()。Trim());
}
//richTextBox1.Text = response.ToString();
}
}
}
我试过它有许多不同的方式(转换为字节)但仍然发布一个NULL数组。
PHP代码:
<?php
$ json = $ _POST;
if(isset($ json)){
echo此var已设置,因此我将打印。;
// var_dump($ json);
var_dump(json_decode(file_get_contents('php:// input')));
}
?>
当我尝试从服务器获取响应并打印到文本框时,它打印正确:
R:设置这个var所以我将print.object(stdClass)#1(2){
[user] =>
string(3)Foo
[password] =>
string(3)Baz
}
但是我无法在我的PHP页面上查看它,它说:
此var已设置,因此我将打印.NULL
不确定是否发布了是否将JSON转换为PHP,但肯定会发布NULL。
我想在PHP页面上看到JSON,任何帮助都会受到赞赏。
谢谢你,
Revathy
您的c#客户端代码没有任何问题,问题是访问浏览器中的网站是来自c#帖子的单独请求,所以你什么都看不见。
根据我的评论,如果你想在post#之后在浏览器中看到数据,你需要保存并检索它。 / p>
这是一个使用文本文件保存帖子数据并显示它的简单示例:
//如果发布请求
if($ _ SERVER ['REQUEST_METHOD'] =='POST'){
//从POST获取数据
$ data = file_get_contents(' PHP://输入');
//保存到文件
file_put_contents('data.txt',$ data);
die('已保存');
}
//否则,如果是get请求(例如浏览器中的视图)
var_dump(json_decode(file_get_contents('data.txt')));
I'm trying to post a JSON string on a PHP page using HTTP response methods as follows:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Web;
namespace http_requests
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/abc/products.php");
//httpWebRequest.ContentType = "application/json";
//httpWebRequest.Method = "POST";
//using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
//{
// string json = new JavaScriptSerializer().Serialize(new
// {
// user = "Foo",
// password = "Baz"
// });
// streamWriter.Write(json);
// streamWriter.Flush();
// streamWriter.Close();
// var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
// using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
// {
// var result = streamReader.ReadToEnd();
// }
//}
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/ABC/products.php");
request.Method = WebRequestMethods.Http.Post;
string DataToPost = new JavaScriptSerializer().Serialize(new
{
user = "Foo",
password = "Baz"
});
byte[] bytes = Encoding.UTF8.GetBytes(DataToPost);
string byteString = Encoding.UTF8.GetString(bytes);
Stream os = null;
//string postData = "firstName=" + HttpUtility.UrlEncode(p.firstName) +
request.ContentLength = bytes.Length;
request.ContentType = "application/x-www-form-urlencoded";
os = request.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
//StreamWriter writer = new StreamWriter(request.GetRequestStream());
//writer.Write(DataToPost);
//writer.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//StreamReader reader = new StreamReader(response.GetResponseStream());
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
richTextBox1.AppendText("R : " + result);
Console.WriteLine(streamReader.ReadToEnd().Trim());
}
//richTextBox1.Text = response.ToString();
}
}
}
I tried it in many different ways (converting to bytes too) but still posts a NULL array.
PHP Code:
<?php
$json = $_POST;
if (isset($json)) {
echo "This var is set so I will print.";
//var_dump($json);
var_dump(json_decode(file_get_contents('php://input')));
}
?>
When I try to get tha response from server and print onto a text box, it prints right:
R : This var is set so I will print.object(stdClass)#1 (2) { ["user"]=> string(3) "Foo" ["password"]=> string(3) "Baz" }
but i'm unable to check it on my PHP page, it says: This var is set so I will print.NULL
Not sure if its posting a JSON onto PHP or not, but it sure does posts a NULL. I want to see the JSON on PHP page, Any help would be appreciated.
Thank you, Revathy
There is nothing wrong with your c# client side code, the problem is that visiting a site in your browser is a seperate request from the c# post, so you wont see anything.
As per my comment, if you want to see the data in a browser after a post i c#, you will need to save and retrieve it.
Here is a simple example using a text file to save post data and display it:
//if post request
if($_SERVER['REQUEST_METHOD']=='POST'){
//get data from POST
$data = file_get_contents('php://input');
//save to file
file_put_contents('data.txt', $data);
die('Saved');
}
//else if its a get request (eg view in browser)
var_dump(json_decode(file_get_contents('data.txt')));
这篇关于使用来自C#的HTTP请求将NULL JSON发布到PHP服务器上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!