在特定字符后抓取所有字符串

时间:2016-10-06 20:46:01

标签: php string parsing substr

为了简单起见,我已经切断了大部分响应字符串

HTTP/1.1 200 OK 
Server: nginx 
Date: Thu, 06 Oct 2016 17:16:58 GMT 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Connection: keep-alive 
Vary: Accept-Encoding 
X-Rate-Limit-Limit: 300 
X-Rate-Limit-Remaining: 297 
X-Rate-Limit-Reset: 24
Strict-Transport-Security: max-age=86400 { "status" : 200, "requestId" : "0290bc44-ee91-44b5-8a4e-d2abde77dda2", "likelihood" : 0.89, "photos" : [ { "type" : "facebook", "typeId" : "facebook", "typeName" : "Facebook", "url" : "https://d2ojpxxtu63wzl.cloudfront.net/static/354316d570e9a875994ebace97f5c499_aadb87c0d5bfdca27ec6d9de1467b45856e2d1e9d5aba04a50cfaa76c0887dd9", "isPrimary" : true }, { "type" : "linkedin", "typeId" : "linkedin", "typeName" : "LinkedIn", "url" : "https://d2ojpxxtu63wzl.cloudfront.net/static/fbb7ab1a477ac0721fa1b6343e65cda8_69b2ec8691007604f741862a51146ab259c689db392a21ab3df697248df68d17" }, { "type" : "google", "typeId" : "google", "typeName" : "GooglePlus", "url" : "https://d2ojpxxtu63wzl.cloudfront.net/static/f08e1cdd3673736fe94a131eb02d5cf2_1d48402d2de6af8479415653cb1f2eb52a715650862e50a6bcac0a6477e32a07" }, { "type" : "gravatar", "typeId" : "gravatar", "typeName" : "Gravatar", "url" : "https://d2ojpxxtu63wzl.cloudfront.net/static/da16a86493fdb3ab77238be7ac5161e6_33ad1223f2c4813fe954eb33cf2f9f3b2cd597b7331be6b53646dd9dd0e68152" },

我正在使用php抓取我在此请求中需要的http标头。在单词之后,我将需要抓取所有减去http标头的内容以返回并使用。我已经尝试使用substr()来剪切并使用一定数量的字符后的所有内容(标题的结尾),但事实证明它是不值得信任的,因为它会在确切的字符数量后切断它并且HTTP请求可能会发生变化随时。我希望正则表达式对此至关重要,但我希望有任何有用的方法来解决这个问题。我将需要在max-age = 86400之后立即剪掉字符串。之后的一切都是需要解析的JSON

3 个答案:

答案 0 :(得分:1)

在PHP中,您可能想要

$body = file_get_contents('php://input');

将检索请求的正文。

您发布的请求似乎格式不正确,因为标头和JSON之间应该有一些换行符,但它看起来像(并且很可能是)JSON作为请求主体传输的情况。 / p>

您可以在以下答案中找到有关使用PHP获取正文的更多信息:https://stackoverflow.com/a/8945912/376841

答案 1 :(得分:0)

您可以查找/r/n/r/n的第一个匹配项,因为它是标题和正文之间的分隔符。你可以这样做。

list($header, $body) = explode("\r\n\r\n", $response, 2);
var_dump($header);
var_dump($body);

看起来您的服务器正在返回正文中的编码块,因此在解码块之前,您将无法解码json。这一切都取决于您首先获取数据的方式。

答案 2 :(得分:0)

那么返回的是整个字符串,没有换行符。但我确实找到了一个可能更复杂的替代解决方案。

preg_match_all('/X-Rate-Limit-.{0,}/',$this->response_json, $out, PREG_PATTERN_ORDER);         

的preg_match(" / \ d {1,} /",$ OUT [0] [0],$限制);的preg_match(" / \ d {1,} /",$ OUT [0] [1],$剩余);的preg_match(" / \ d {1,} /",$ OUT [0] [2],$复位); $ pos = strpos($ this-> response_json,' {'); $ response = substr($ this-> response_json,$ pos);