从PHP将数据POST到JSON服务


POST data to JSON service from PHP

我最近一直在尝试JSON回复。因此,作为一项测试,我创建了一个小型服务,用于识别另一个域上的用户。以下是我最初测试的要点:

在域A上,我有一个php文件,当使用特定的GET变量(URI)调用时,它将向调用方返回一个JSON字符串。这个想法是我向用户发送并传递并返回一个json字符串,其中包含一个变量,说明它是否成功登录,如果是,则为用户数据,如果不是,则为错误消息。

然后我在域B中创建了一个带有javascript和表单的页面。在表单提交时,javascript使用XHR(HTMLRequest)调用域a中的页面,检索JSON字符串,将其转换为对象,并根据结果声明登录与否。

这是有效的。

经过重新思考,我意识到对于某些服务来说,这很好,但作为登录,它不起作用,因为客户端会在域B中向网站声称"嘿,我以用户C的身份登录了域A,所以你可以信任我"-你真的不应该信任客户端。

所以我稍微改变了一下,现在域B中的页面提交用户并传递给域B,域B(PHP中的服务器端)使用file_get_contents从域a获取JSON字符串,并根据它来决定用户现在是否登录。

这也是有效的,在我看来要好得多。

然而,现在我正处于第三阶段——即使服务器进行了身份验证,我仍然会将用户发送并通过URI传递到域A。我更愿意将其作为POST(或OPTIONS)发送——就像不在URI中一样——PHP到PHP,最好是作为一个组合编码字符串发送——比如MD5('user:'.$user.':pass:'.$pass)或类似的字符串。

创建MD5的字符串很容易,但我如何通过PHP POST,然后将POST结果作为字符串检索到PHP中进行处理?

我建议您编写PHP代码,假设所有传入的JSON数据都编码为UTF-8,因为这是规范中的默认值,当然也是大多数JSON编解码器中的默认设置。

不过,最好在API文档中明确表示application/json内容假定为UTF-8。如果客户端想要传输不同编码的JSON,请指示他们传递一个不同的Content-Type标头,该标头指定非默认编码,其标头如下:Content-Type: application/json; charset=UTF-16