]> git.mxchange.org Git - friendica.git/commitdiff
one more try at splitting out multiple (> 2) http headers in curl
authorFriendika <info@friendika.com>
Sun, 3 Jul 2011 10:47:18 +0000 (03:47 -0700)
committerFriendika <info@friendika.com>
Sun, 3 Jul 2011 10:47:18 +0000 (03:47 -0700)
boot.php

index 0e9abddd30f32b66309f20e0db450bada2bf4382..459bec217ef7a6e52d7609ac9835063eb990170d 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -702,11 +702,20 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
 
        $s = @curl_exec($ch);
 
+       $base = $s;
        $curl_info = curl_getinfo($ch);
-       $header_size = $curl_info['header_size'];
        $http_code = $curl_info['http_code'];
 
-       $header = substr($s,0,$header_size);
+       $header = '';
+
+       // Pull out multiple headers, e.g. proxy and continuation headers
+       // allow for HTTP/2.x without fixing code
+
+       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
+               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+               $header .= $chunk;
+               $base = substr($base,strlen($chunk));
+       }
 
        if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
         $matches = array();
@@ -718,9 +727,10 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
             return fetch_url($url,$binary,$redirects);
         }
     }
+
        $a->set_curl_code($http_code);
 
-       $body = substr($s,$header_size);
+       $body = substr($s,strlen($header));
 
        $a->set_curl_headers($header);
 
@@ -767,11 +777,20 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
 
        $s = @curl_exec($ch);
 
+       $base = $s;
        $curl_info = curl_getinfo($ch);
-       $header_size = $curl_info['header_size'];
        $http_code = $curl_info['http_code'];
 
-       $header = substr($s,0,$header_size);
+       $header = '';
+
+       // Pull out multiple headers, e.g. proxy and continuation headers
+       // allow for HTTP/2.x without fixing code
+
+       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
+               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+               $header .= $chunk;
+               $base = substr($base,strlen($chunk));
+       }
 
        if($http_code == 301 || $http_code == 302 || $http_code == 303) {
         $matches = array();
@@ -784,7 +803,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
         }
     }
        $a->set_curl_code($http_code);
-       $body = substr($s,$header_size);
+       $body = substr($s,strlen($header));
 
        $a->set_curl_headers($header);