2016-06-09 64 views
0

所以我試圖設置遠程PHP腳本的POST數據。該腳本使用POST數據作爲文件名並用它檢索JSON文件。但這可悲的是不起作用。它檢索沒有值的數據。下面是它如何工作的:C#WebClient上傳字符串無法正常工作

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

是什麼'ConfigurationManager.AppSettings [ 「scripturi」]的價值。的ToString()' –

+0

www.mydomain.eu/ –

+0

檢查這個http://stackoverflow.com/a/25005434/5001784 –

回答

0

當你查找的PHP的文檔$_POST,你會發現:

的使用應用程序/時通過HTTP POST方法傳遞的變量組成的關聯數組的X WWW的形式,進行了urlencoded或multipart/form-data作爲請求中的HTTP Content-Type。

這意味着您到服務器的POST的內容必須是其中的一種內容類型,它的正文需要與期望的格式相匹配。

在您的代碼中,您使用UploadData方法。該方法對你沒有任何魔法。它只是發佈你給它的字節。您的要求將是這樣的線:

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陣列機智h 文件名用戶

當調試這些類型的請求時,請確保您運行Fiddler,以便您可以檢查HTTP通信。

相關問題