繁体   English   中英

如何编码HTTP POST参数(C#客户端到PHP服务器)?

[英]How to encode HTTP POST parameters (C# client to PHP Server)?

我无法找出将POST参数编码为服务器调用的最佳方法。 我编写了一个由PHP服务器提供服务的C#客户端。 我想在参数中允许很大的灵活性,所以我目前的计划是使用一个参数,我使用JSON进行编码。 例如:

params = {"object":"Main","function":"doecho","params":["echothis...."]}

我正在使用C#WebRequest对象和contentType“application / x-www-form-urlencoded; charset = UTF-8”。 数据到达服务器,一切都按预期工作,直到我在数据中添加非法的JSON字符。

例如,如果我使用以下数据,那么我就不能在服务器端对它执行json_decode。 当我用$ this-> getRequest() - > getParams();(Zend_Framework)读取时,服务器似乎会自动将%40变为双引号(“)。

params = {"object":"Main","function":"doecho","params":["echothis%25%5d%22%40%3d%26...."]}

这里的最佳做法是什么? 我需要base64编码数据吗? 内容类型或php设置是否有一些明显的东西?

我完全控制客户端和服务器,所以我想知道什么是正确/最好的事情。

虽然可以使用任何内容类型上传到HTTP,但实际上有三种:

  1. 一个由给定服务的文档专门设置。
  2. application / x-www-form-urlencoded - HTML表单使用的默认值。
  3. multipart / form-data - HTML表单使用的另一种表单,包含表单上载时需要。

由于2和3是如此常用(因为所有浏览器都支持提交表单),几乎所有服务器端技术都有处理它们的东西。 因此,除非PHP部分做了一些奇怪的事情,否则你应该能够使用它们。

application / x-www-form-urlencoded不适合某些数据,但对于它的用途最简单。 它与为GET表单请求创建查询字符串的方式几乎相同,但与POST内容相同。

因此,您希望您的内容为:

"params=" + Uri.EscapeDataString(paramData)

因此,第一个成为:

params=%7B%22object%22%3A%22Main%22%2C%22function%22%3A%22doecho%22%2C%22params%22%3A%5B%22echothis....%22%5D%7D

第二个:

params=%7B%22object%22%3A%22Ccmes_Main%22%2C%22function%22%3A%22doecho%22%2C%22params%22%3A%5B%22echothis%2525%255d%2522%2540%253d%2526....%22%5D%7D

这两个PHP的内置函数都会转回到你问题中的表单中。

我的第一个想法是将其编码为base64。 我认为这应该是简化方式。

来自arcanecode.com

static public string EncodeTo64(string toEncode)
{
  byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
  string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
  return returnValue;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM