Commit ada73058 authored by Dries's avatar Dries

- Patch #457788 by c960657: drupal_http_request() does not handle redirects properly.

parent f116acc8
...@@ -521,14 +521,15 @@ function drupal_http_request($url, array $options = array()) { ...@@ -521,14 +521,15 @@ function drupal_http_request($url, array $options = array()) {
// Merge the default headers. // Merge the default headers.
$options['headers'] += array( $options['headers'] += array(
// RFC 2616: "non-standard ports MUST, default ports MAY be included".
// We don't add the port to prevent from breaking rewrite rules checking the
// host that do not take into account the port number.
'Host' => $host,
'User-Agent' => 'Drupal (+http://drupal.org/)', 'User-Agent' => 'Drupal (+http://drupal.org/)',
'Content-Length' => strlen($options['data']), 'Content-Length' => strlen($options['data']),
); );
// RFC 2616: "non-standard ports MUST, default ports MAY be included".
// We don't add the standard port to prevent from breaking rewrite rules
// checking the host that do not take into account the port number.
$options['headers']['Host'] = $host;
// If the server url has a user then attempt to use basic authentication // If the server url has a user then attempt to use basic authentication
if (isset($uri['user'])) { if (isset($uri['user'])) {
$options['headers']['Authorization'] = 'Basic ' . base64_encode($uri['user'] . (!empty($uri['pass']) ? ":" . $uri['pass'] : '')); $options['headers']['Authorization'] = 'Basic ' . base64_encode($uri['user'] . (!empty($uri['pass']) ? ":" . $uri['pass'] : ''));
...@@ -544,13 +545,11 @@ function drupal_http_request($url, array $options = array()) { ...@@ -544,13 +545,11 @@ function drupal_http_request($url, array $options = array()) {
$options['headers']['User-Agent'] = $matches[0]; $options['headers']['User-Agent'] = $matches[0];
} }
$request = $options['method'] . ' ' . $path . " HTTP/1.0\r\n";
foreach ($options['headers'] as $name => $value) { foreach ($options['headers'] as $name => $value) {
$options['headers'][$name] = $name . ': ' . trim($value); $request .= $name . ': ' . trim($value) . "\r\n";
} }
$request .= "\r\n" . $options['data'];
$request = $options['method'] . ' ' . $path . " HTTP/1.0\r\n";
$request .= implode("\r\n", $options['headers']);
$request .= "\r\n\r\n" . $options['data'];
$result->request = $request; $result->request = $request;
fwrite($fp, $request); fwrite($fp, $request);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment