2010-08-16 28 views
2

我正在構建一個控制檯應用程序,收集一些數據,然後通過POST請求將其發送到php頁面。這是我的C#代碼:控制檯應用程序只發送POST請求中的前46個字符

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("http://localhost/log.php"); 
Request.Method = "POST"; 
Request.ContentType = "application/x-www-form-urlencoded"; 
string PostData = "data=" + UserOutput; 
Request.ContentLength = PostData.Length; 

StreamWriter stOut = new StreamWriter(Request.GetRequestStream(), System.Text.Encoding.ASCII); 
stOut.Write(PostData); 
stOut.Close(); 

而PHP頁面(log.php):

<?php 

file_put_contents('log.txt', $_POST['data']); 

?> 

注意我只使用file_put_contents測試如果一切正常OK,這不是我想要的結束了。

要發送的發佈數據的長度超過2000個字符,並且正確的內容長度由Request.ContentLength = PostData.Length;返回,所以這不是問題。但是每當我嘗試這個時,它只會發送POST數據的前46個字符。

我不得不承認,在這一點上,我複製了大部分代碼,因爲我在C#中不是很有經驗。

任何幫助將是偉大的,謝謝。

回答

3

是第47個字符「&」?你聲稱你的數據是URL編碼的,但是你沒有在你提供的代碼中進行任何URL編碼。如果有一個「&」,將指示PHP,這是即將接受一種新形式參數...

一種方式來驗證這一點(除了使用HttpUtility.UrlEncode)是使用FiddlerWireshark,看看有什麼實際上正在網絡層面進行。

+0

啊哈保存它,我從來沒有真正想過。這是問題,我將確保從現在開始UrlEncode。謝謝 :) – Kratz 2010-08-16 18:57:16

0

Close()應該處理它,但您可能想在此之前嘗試.Flush()

0

如果您只發送一大塊數據,那麼省略Content-type標題並製作PostData == UserOutput會是一個更好的策略。

你可以接着用

$s = fopen("php://input", "r"); 
file_put_contents('log.txt', $s); 
相關問題