Jef*_*eff 10 php c# json httpwebrequest
我无法找出将POST参数编码为服务器调用的最佳方法.我编写了一个由PHP服务器提供服务的C#客户端.我想在参数中允许很大的灵活性,所以我目前的计划是使用一个参数,我使用JSON进行编码.例如:
params = {"object":"Main","function":"doecho","params":["echothis...."]}
Run Code Online (Sandbox Code Playgroud)
我正在使用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...."]}
Run Code Online (Sandbox Code Playgroud)
这里的最佳做法是什么?我需要base64编码数据吗?内容类型或php设置是否有一些明显的东西?
我完全控制客户端和服务器,所以我想知道什么是正确/最好的事情.
Jon*_*nna 13
虽然可以使用任何内容类型上传到HTTP,但实际上有三种:
由于2和3是如此常用(因为所有浏览器都支持提交表单),几乎所有服务器端技术都有处理它们的东西.因此,除非PHP部分做了一些奇怪的事情,否则你应该能够使用它们.
application/x-www-form-urlencoded不适合某些数据,但对于它的用途最简单.它与为GET表单请求创建查询字符串的方式几乎相同,但与POST内容相同.
因此,您希望您的内容为:
"params=" + Uri.EscapeDataString(paramData)
Run Code Online (Sandbox Code Playgroud)
因此,第一个成为:
params=%7B%22object%22%3A%22Main%22%2C%22function%22%3A%22doecho%22%2C%22params%22%3A%5B%22echothis....%22%5D%7D
Run Code Online (Sandbox Code Playgroud)
第二个:
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
Run Code Online (Sandbox Code Playgroud)
这两个PHP的内置函数都会转回到你问题中的表单中.