控制台应用程序仅在POST请求中发送前46个字符

时间:2010-08-16 18:46:26

标签: c# php post

我正在构建一个控制台应用程序,它收集一些数据,然后通过POST请求将其发送到php页面。这是我的C#代码:

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来测试一切是否正常,这不是我想要做的事情。

要发送的帖子数据长度超过2,000个字符,Request.ContentLength = PostData.Length;返回正确的内容长度,这不是问题所在。但每当我尝试这个时,它只发送我的POST数据的前46个字符。

此时我必须承认我复制了大部分代码,因为我对C#不是很有经验。

任何帮助都会很棒,谢谢。

3 个答案:

答案 0 :(得分:3)

第47个字符是“&amp;”在任何情况下?您声称您的数据是经过网址编码的,但您在所提供的代码中没有进行任何网址编码。如果有“&amp;”这将向PHP表明它即将接受一个新的表单参数...

验证此问题的一种方法(除了使用HttpUtility.UrlEncode之外)将使用FiddlerWireshark来查看网络级别上实际的内容

答案 1 :(得分:0)

Close()应该处理它,但您可能希望在此之前尝试.Flush()

答案 2 :(得分:0)

如果您只发送一大块数据,那么省略Content-type标头并制作PostData == UserOutput是一种更好的策略。

然后您可以使用

保存它
$s = fopen("php://input", "r");
file_put_contents('log.txt', $s);
相关问题