如何用PHP处理HTTP API响应


How to deal with HTTP API response with PHP

我正在处理一些web项目,这些项目处理以下格式的HTTP API响应:

{response_header1=value1,response_header2,value2,response_header3=value3,response_header4=,response_header5=value5}

error xxx,err_desc=Invalid password

这些响应看起来不像标准的XMLJSON格式。我想知道在PHP中处理这些类型的响应的最佳方式是什么。

以下代码将处理您从正在使用的API发布的标准响应:

$var = '{response_header1=value1,response_header2,value2,response_header3=value3,response_header4=,response_header5=value5}';
if(strpos($var, '}') !== false) {
    parse_str(str_replace(',','&',trim($var,'{}')), $var);
    var_export($var);
} else {
    echo 'error';
}

如果您需要处理特定的错误值,您可以访问并解析我放置echo语句的位置。我所做的是去掉左右两边的大括号,然后将整个字符串转换为标准的URL查询,parse_url命令解析该查询,并将其存储为名为$var的变量中的键=>值集(如访问$_POST或$_REQUEST vars)——您可以从var_export($var)命令中看到此结果。

这也比explode 快得多

您可能需要用正则表达式编写一个自定义转换器,或者需要在代码中进行转换。下面是一个没有正则表达式的内联转换示例:

$incoming = "{response_header1=value1,response_header2=value2,response_header3=value3,response_header4=,response_header5=value5}";
$splitted = explode(",", trim($incoming,'{}'));
$values = array();
foreach($splitted as $split) {
    $exploded = explode("=",$split);
    $values[$exploded[0]] = $exploded[1];
}