我正在构建一个控制台应用程序,它收集一些数据,然后通过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#不是很有经验。
任何帮助都会很棒,谢谢。
答案 0 :(得分:3)
第47个字符是“&amp;”在任何情况下?您声称您的数据是经过网址编码的,但您在所提供的代码中没有进行任何网址编码。如果有“&amp;”这将向PHP表明它即将接受一个新的表单参数...
验证此问题的一种方法(除了使用HttpUtility.UrlEncode
之外)将使用Fiddler或Wireshark来查看网络级别上实际的内容
答案 1 :(得分:0)
Close()
应该处理它,但您可能希望在此之前尝试.Flush()
。
答案 2 :(得分:0)
如果您只发送一大块数据,那么省略Content-type
标头并制作PostData == UserOutput
是一种更好的策略。
然后您可以使用
保存它$s = fopen("php://input", "r");
file_put_contents('log.txt', $s);