2016-10-06 46 views
0

对于纯朴缘故,我已经切断了大部分这种应答串抓住所有字符串后的特定字符

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之后切断字符串。之后,一切都将需要解析

+0

你可能无法得到不需要的标题(只是身体)在这是来自哪些代码。否则只是分裂在第一次“{” – nogad

+0

你用什么来获取这些数据?它看起来可能会损坏。 – Phil

回答

1

在PHP中的JSON,你可能想

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

这将检索请求的主体。

您发布的请求似乎格式错误,因为标头和该JSON之间应该存在一些换行符,但看起来(并且很可能是)JSON作为请求正文传输的情况。

您可以找到有关这个答案让在身体PHP更多的信息:https://stackoverflow.com/a/8945912/376841

+0

OP正在处理服务器响应而不是客户端请求。 – Phil

+0

我很确定他正在处理一个请求:“我正在使用php抓取这个请求中需要的http头。” 我可能是错的,但也许OP可以澄清。 – Julian

0

你可以寻找的/r/n/r/n作为第一个出现的头和身体之间的分隔符。你可以做这样的事情。

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

它看起来像你的服务器返回体内编码块,所以您将无法直到解码块到JSON解码。这一切都取决于你如何在第一时间获取数据。

0

那么什么是作为整个字符串返回没有新行转义。但我确实找到了一个可能更复杂一点的替代解决方案。 preg_match(“/ \ d {1,} /”,$ out [0] [0],$ limit);以及其中,的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);

相关问题