所以我试图设置远程PHP脚本的POST数据。此脚本使用POST数据作为文件名,并使用它检索JSON文件。但遗憾的是,这不起作用。它检索没有值的数据。以下是它的工作原理:
C#:
using (WebClient client = new WebClient())
{
byte[] saveData = client.UploadData(
"http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "storeData.php",
"POST",
System.Text.Encoding.ASCII.GetBytes("filename="+ dt.bedrijfsNaam));
}
PHP:
<?php
$host='myip';
$user='username';
$pass='userpass';
$db='mydatabase';
$link= mysqli_connect($host, $user, $pass, $db) or die(msqli_error($link));
$filename = $_POST['filename'] . '.json';
$json = file_get_contents(__DIR__."/json/".$filename);// my thoughts are that something is wrong in this line?
$obj = json_decode($json);
$query_opslaan = "INSERT INTO skMain (BedrijfsName, ContPers, TelNum, email, Land, Plaats, PostCode) VALUES ('". $obj->bedrijfsNaam ."' , '". $obj->ContPers ."', '". $obj->TelNum ."', '". $obj->email ."', '". $obj->Land ."', '". $obj->Plaats ."', '". $obj->PostCode ."')";
mysqli_query($link, $query_opslaan) or die(mysqli_error($query_opslaan));
?>
它应该从JSON文件中检索正确的数据,但它不会检索所有值,并且查询将空白数据存储到数据库中。我认为我使用了C#脚本错误,这就是为什么我也认为$ json变量无法正常工作的原因。但我并不完全知道我做错了什么。有人可以帮助我吗?
答案 0 :(得分:1)
当您查找PHP $_POST
的文档时,您会发现:
当使用application / x-www-form-urlencoded或multipart / form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的关联变量数组。
这意味着您POST到服务器的内容必须是其中一个内容类型,并且其正文需要与预期格式匹配。
在您的代码中,您使用UploadData
方法。那种方法对你没有任何魔力。它只是POST你给它的字节。您的请求将如下所示:
POST /questions/ask HTTP/1.1 Host: stackoverflow.com Content-Length: 13 Expect: 100-continue Connection: Keep-Alive filename=test
您看到没有Content-Type标头。
然而,还有一个名为UploadValues
的方法,它会使用NameValueCollection
并将其内容转换为所需的x-www-form-urlencoded格式:
using(var wc= new WebClient())
{
var nv = new System.Collections.Specialized.NameValueCollection();
nv.Add("filename", "test");
nv.Add("user", "bar");
wc.UploadValues("http://stackoverflow.com/questions/ask", nv);
}
执行时,以下内容将发送至服务器:
POST /questions/ask HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: stackoverflow.com Content-Length: 22 Expect: 100-continue filename=test&user=bar
最后一个正文内容将导致填充的$_POST
数组包含 filename 和 user 。
调试这些请求时,请确保运行Fiddler,以便检查HTTP流量。