0

我正在尝试通过 C# 将 base64 编码数据发送WebRequest到 php 脚本。然后我收到发送的数据file_get_contents("php://input"),当数据长度低于8 KBs时执行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;

有人可以帮忙吗?

4

2 回答 2

0
  1. 更改请求的内容类型

    request.ContentType = "文本/纯文本";

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

于 2013-09-04T01:16:16.097 回答
0

以下是不正确的(mea culpa)。您不能将 enctype=multipart/form-data 与 php://input 一起使用。看这里

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


确保当您从 c# 应用程序 POST 到您的 PHP 应用程序时,您将 enctype 设置为 multipart/form-data。

说明

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

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

于 2013-01-26T20:53:24.197 回答