当发布数据长度超过8K时,php无法接收来自C#webrequest的请求

时间:2013-01-26 20:33:59

标签: c# php

我正在尝试通过C#WebRequest将base64编码数据发送到php脚本。然后我收到file_get_contents("php://input")发送的数据,当数据长度低于8 KB时,执行php代码,否则无法执行。另一方面,php没有收到请求。

代码C#:

            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            // postData is Base64_encoded
            byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            WebResponse response = request.GetResponse();
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseData = reader.ReadToEnd();
            responseData = SecurityUtils.DecryptUrlData(responseData);
            reader.Close();
            dataStream.Close();
            response.Close();
            return responseData;

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

以下是不正确的(mea culpa)。你不能在php:// input中使用enctype = multipart / form-data。 See here

也许您也可以将PHP代码发布到您的问题中?


确保从c#app发布到PHP应用程序时,将enctype设置为multipart / form-data。

<强> Explanaition

您使用的是application / x-www-form-urlencoded还是multipart / form-data?这里有一个很好的解释:application/x-www-form-urlencoded or multipart/form-data?

根据上面的链接,以application / x-form-urlencoded格式发布数据会将正文放入URL中。当URL大于8K时,许多服务器和语言(PHP,Apache)将切断或抛出错误。请参阅问题:What is the maximum length for a URL?

答案 1 :(得分:0)

  1. 更改请求的内容类型

    request.ContentType =“text / plain”;

  2. 查看服务器端的php.ini post_max_size