2010-08-16 75 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);