繁体   English   中英

使用PHP CURL发布JSON

[英]Posting JSON with PHP CURL

我的任务是发布到仅接受JSON的API。 我正在使用PHP的CURL完成此操作。

我以前没有发布过API的问题,但是从来没有发布过JSON,这是我不熟悉的东西,我试图自己研究并解决问题,但是我没有任何运气。

与我要发布的公司的某人交谈时,有人告诉我我的服务器正在碰到他们的服务器,唯一的错误是我的发布正文未正确格式化JSON ..(该公司的没人知道php :(所以没有帮助)

这是我的代码:

$jarr = array("ProviderID" => "L005A", "FirstName" => $first, 
           "LastName" => $last, "PhoneNumber" => $PhoneNumber, 
           "PhoneNumberType" => $PhoneNumberType);

$content = json_encode($jarr);

$curl_handle = curl_init("URL Im posting to");
 curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
'Accept: application/json;charset=utf-8',
    'Content-Type: application/json;charset=utf-8',
    'Expect: 100-continue',
    'Connection: Keep-Alive'));
    curl_setopt($curl_handle, CURLOPT_HEADER, 1);
    curl_setopt($curl_handle, CURLOPT_POST, 0);
    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $content);
    curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    $first = curl_exec($curl_handle);
    curl_close($curl_handle);
    echo "Result ";
    echo $first;

从给出的文档中,我必须遵循的唯一参数是:
方法:过帐

标头:
接受:application / json; charset = utf-8
内容类型:application / json; charset = utf-8
期望:100-继续
连接:保持活动

当前,当我执行脚本时,我得到的回报是:

结果HTTP / 1.1 100继续HTTP / 1.1 400错误的请求缓存控制:no-cache语法:no-cache内容类型:application / json; charset = utf-8过期:-1服务器:Microsoft-IIS / 7.5 X-AspNet版本:4.0.30319 X-Powered-by:ASP.NET日期:2012年11月1日星期四15:43:18 GMT内容长度:26 {“ record.ProviderID”:[“”]}

因此出现400错误是因为我的身体格式不正确。 我的问题是,如何格式化需要以正确的JSON格式发送的数据?

从我阅读的内容来看,这段代码应该做到这一点,但它不能做到:

$jarr = array("ProviderID" => "L005A", "FirstName" => $first,
           "LastName" => $last, "PhoneNumber" => $PhoneNumber,
           "PhoneNumberType" => $PhoneNumberType);

$content = json_encode($jarr);

我遇到了同样的问题。 调试后,发现在发送JSON字符串时,未引号或双引号是造成Integer值的罪魁祸首。 您需要将双引号引起来的整数值作为字符串发送。

例如:

{"PhoneNumber":9876543210}

要么

{"PhoneNumber":"9876543210"}

不管用。

{"PhoneNumber":"N_9876543210"}

将工作。

我一弄清楚,将会立即更新,这正是此问题的根本原因。 如果有人知道,请尽快更新。

编辑:URL编码解决的问题。 我希望它也能解决您的情况。

暂无
暂无

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

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