PHP file get contents () и настройка заголовков запросов



С PHP, можно ли отправлять заголовки HTTP с file_get_contents() ?



Я знаю, что вы можете отправить агент пользователя из вашего . Однако, вы также можете отправить другую информацию, такую как HTTP_ACCEPT,HTTP_ACCEPT_LANGUAGE и HTTP_CONNECTION С file_get_contents() ?



или есть другая функция, которая будет это осуществить?

782   7  

7 ответов:

на самом деле, при дальнейшем чтении на file_get_contents() функция:

// Create a stream
$opts = [
    "http" => [
        "method" => "GET",
        "header" => "Accept-language: en\r\n" .
            "Cookie: foo=bar\r\n"
    ]
];

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);

вы можете быть в состоянии следовать этой схеме, чтобы достичь того, что вы ищете, я лично не проверял это, хотя. (и если это не сработает, не стесняйтесь проверить мой другой ответ)

вот что сработало для меня (Доминик был всего на одну строку короче).

$url = "";

$options = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n" .  // check function.stream-context-create on php.net
              "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad 
  )
);

$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);

вы можете использовать эту переменную для получения заголовков ответов после

использование библиотек PHP cURL, вероятно, будет правильным путем, так как эта библиотека имеет больше возможностей, чем простой file_get_contents(...).

пример:

<?php
$ch = curl_init();
$headers = array('HTTP_ACCEPT: Something', 'HTTP_ACCEPT_LANGUAGE: fr, en, da, nl', 'HTTP_CONNECTION: Something');

curl_setopt($ch, CURLOPT_URL, "http://localhost"); # URL to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); # return into a variable
curl_setopt($ch, CURLOPT_HTTPHEADER, $header ); # custom headers, see above
$result = curl_exec( $ch ); # run!
curl_close($ch);
?>

да.

при вызове file_get_contents по url-адресу следует использовать функцию stream_create_context, которая довольно хорошо документирована php.net

Это более или менее точно описано на следующей странице по адресу php.net в разделе комментариев пользователей:http://php.net/manual/en/function.stream-context-create.php

Если вам не нужен HTTPS и curl не доступен в вашей системе, вы можете использовать fsockopen

эта функция открывает соединение, из которого вы можете читать и писать, как вы бы сделали с обычным дескриптором файла.

к сожалению, это не выглядит как file_get_contents() действительно предлагает такую степень контроля. Расширение cURL обычно появляется первым, но я бы настоятельно рекомендовал расширение PECL_HTTP (http://pecl.php.net/package/pecl_http) для очень простых и понятных HTTP-запросов. (это гораздо проще работать, чем cURL)

Comments

    Ничего не найдено.