aboutsummaryrefslogtreecommitdiffstats
path: root/boot.php
diff options
context:
space:
mode:
authorFriendika <info@friendika.com>2011-07-03 03:47:18 -0700
committerFriendika <info@friendika.com>2011-07-03 03:47:18 -0700
commit34df1538f33c2d7b4e1e24e47735c7168c586b97 (patch)
treec60f42e165701d7575378efef340fd3f0b0e3435 /boot.php
parent12b114f6adfa3f4cd1a50c832509f7205e5b7284 (diff)
downloadvolse-hubzilla-34df1538f33c2d7b4e1e24e47735c7168c586b97.tar.gz
volse-hubzilla-34df1538f33c2d7b4e1e24e47735c7168c586b97.tar.bz2
volse-hubzilla-34df1538f33c2d7b4e1e24e47735c7168c586b97.zip
one more try at splitting out multiple (> 2) http headers in curl
Diffstat (limited to 'boot.php')
-rw-r--r--boot.php31
1 files changed, 25 insertions, 6 deletions
diff --git a/boot.php b/boot.php
index 0e9abddd3..459bec217 100644
--- 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);