从 curl 响应字符串中获取特定变量
Get particular variable from curl response string
我从 curl 中得到如下字符串形式的响应:
Accepted=AVSAUTH:TEST:::829649376:N::U
ENTRYMETHOD=KEYED
historyid=829649376
MERCHANTORDERNUMBER=14700000186
orderid=646526156
PAYTYPE=MasterCard
recurid=0
refcode=829649376-TEST
result=1
Status=Accepted
transid=0
我想获得像 status=Accepted 这样的单个变量,这样我就可以将它们存储在我的数据库中。任何帮助将不胜感激。
preg_match是你的朋友:
<?
$result = "Accepted=AVSAUTH:TEST:::829649376:N::U
ENTRYMETHOD=KEYED
historyid=829649376
MERCHANTORDERNUMBER=14700000186
orderid=646526156
PAYTYPE=MasterCard
recurid=0
refcode=829649376-TEST
result=1
Status=Accepted
transid=0";
preg_match_all("/^([^=]+)=(.*)$/m", $result, $regs, PREG_SET_ORDER);
$data = [];
foreach($regs as $reg) {
$data[$reg[1]] = $reg[2];
}
print_r($data);
?>
$data 将是一个哈希数组:
Array
(
[Accepted] => AVSAUTH:TEST:::829649376:N::U
[ENTRYMETHOD] => KEYED
[historyid] => 829649376
[MERCHANTORDERNUMBER] => 14700000186
[orderid] => 646526156
[PAYTYPE] => MasterCard
[recurid] => 0
[refcode] => 829649376-TEST
[result] => 1
[Status] => Accepted
[transid] => 0
)
最简单的方法可能是遍历每一行,并将其构建到一个简单的 key/value 数组中:
$results = [];
foreach (explode("\n", $string) as $line) {
list ($key, $value) = explode('=', $line, 2);
$results[$key] = $value;
}
echo $results['Status']; // Accepted
您可以如下提取curl响应的内容,
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// ...
$response = curl_exec($ch); // Curl response
// After your curl response
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
curl_close($ch);
var_dump($body);
我从 curl 中得到如下字符串形式的响应:
Accepted=AVSAUTH:TEST:::829649376:N::U
ENTRYMETHOD=KEYED
historyid=829649376
MERCHANTORDERNUMBER=14700000186
orderid=646526156
PAYTYPE=MasterCard
recurid=0
refcode=829649376-TEST
result=1
Status=Accepted
transid=0
我想获得像 status=Accepted 这样的单个变量,这样我就可以将它们存储在我的数据库中。任何帮助将不胜感激。
preg_match是你的朋友:
<?
$result = "Accepted=AVSAUTH:TEST:::829649376:N::U
ENTRYMETHOD=KEYED
historyid=829649376
MERCHANTORDERNUMBER=14700000186
orderid=646526156
PAYTYPE=MasterCard
recurid=0
refcode=829649376-TEST
result=1
Status=Accepted
transid=0";
preg_match_all("/^([^=]+)=(.*)$/m", $result, $regs, PREG_SET_ORDER);
$data = [];
foreach($regs as $reg) {
$data[$reg[1]] = $reg[2];
}
print_r($data);
?>
$data 将是一个哈希数组:
Array
(
[Accepted] => AVSAUTH:TEST:::829649376:N::U
[ENTRYMETHOD] => KEYED
[historyid] => 829649376
[MERCHANTORDERNUMBER] => 14700000186
[orderid] => 646526156
[PAYTYPE] => MasterCard
[recurid] => 0
[refcode] => 829649376-TEST
[result] => 1
[Status] => Accepted
[transid] => 0
)
最简单的方法可能是遍历每一行,并将其构建到一个简单的 key/value 数组中:
$results = [];
foreach (explode("\n", $string) as $line) {
list ($key, $value) = explode('=', $line, 2);
$results[$key] = $value;
}
echo $results['Status']; // Accepted
您可以如下提取curl响应的内容,
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// ...
$response = curl_exec($ch); // Curl response
// After your curl response
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
curl_close($ch);
var_dump($body);