PHP file_get_contents () ve başlıklar

9 Cevap php

PHP ile, file_get_contents() ile HTTP başlıklarını göndermek mümkün mü?

Ben size php.ini dosyasında kullanıcı ajan göndermek biliyorum. Ancak, aynı zamanda HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGE ve file_get_contents ile HTTP_CONNECTION () gibi diğer bilgi gönderebilir?

Ya da bu başarmak başka bir işlevi var mı?

9 Cevap

Sen içine bakmak isteyebilirsiniz cUrl - bu size file_get_contents çok daha büyük bir esneklik verecek

Aslında, daha file_get_contents() fonksiyonu okuduktan sonra:

<?php
// Create a stream
$opts = array(
  'http'=>array(
    '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);
?>

Sen, ben şahsen bu olsa test değil isteyen ne elde etmek için bu modeli takip etmek mümkün olabilir. (Işe yaramazsa ve benim diğer cevabını kontrol etmek için çekinmeyin)

İki yıl ve kesin bir cevap ... Dominic sadece bir çizgi ona kısa olmasına rağmen.

$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);

Ne yazık ki, o file_get_contents() gerçekten kontrolün derecesi gibi görünmüyor. CURL uzantısı genellikle gelip ilk, ama çok çok basit ve kolay HTTP istekleri için pecl_http uzantısı (http://pecl.php.net/package/pecl_http) önerebilirim. (O cURL daha çalışmak çok daha kolay)

Bu kütüphane basit file_get_contents(...) daha fazla özelliklere sahip olarak php cURL kütüphaneleri kullanarak muhtemelen, gitmek için doğru yol olacaktır.

Örnek:

<?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);
?>

Evet.

Bir url üzerinde file_get_contents ararken, bir oldukça iyi php.net belgelenen stream_create_context işlevini kullanmanız gerekir

Bu, daha fazla veya daha az tam kullanıcı yorum bölümünde php.net de aşağıdaki sayfada kaplıdır: http://php.net/manual/en/function.stream-context-create.php

Sen file_get_content() fonksiyonundan sonra bu değişkeni kullanabilirsiniz.

Kod:

  file_get_contents("http://example.com");
  var_dump($http_response_header);

Çıktı:

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}

linux komutunu kullanarak başlığını gönderin: wget gibi php dosyasında.

exec('wget--referer "www.example.com"');