2010-03-15 20 views
234

Bir URL'nin içeriğini almak için PHP'nin file_get_contents() işlevini kullanıyorum ve daha sonra üstbilgileri $http_response_header değişkeninden işliyorum.PHP'de file_get_contents kullanarak nasıl veri gönderilir?

Artık sorun, bazı URL'lerin URL'ye gönderilecek bazı verilere (örneğin, giriş sayfaları) ihtiyaç duymasıdır.

Bunu nasıl yaparım?

Stream_context kullanarak farkettim Bunu yapabilirim ama tamamen açık değilim.

Teşekkürler.

+0

http://php.net/manual/en/function.stream-context-create.php#89080 – Ben

+3

Bu sonsuz upvoted edilmelidir kullanabilirsiniz. İşi yapan ham PHP işlevselliğiniz varsa Curl/Guzzle veya başka bir fantezi kitaplığı kullanmanın bir nedeni yoktur. –

cevap

487

file_get_contents kullanarak bir HTTP POST isteği göndermek o kadar da zor değil: Aslında, tahmin ettiğiniz gibi $context parametresini kullanmanız gerekir.


bu sayfada PHP kılavuzunda verilen örnek var: HTTP context options (alıntı): Temel olarak

$postdata = http_build_query(
    array(
     'var1' => 'some content', 
     'var2' => 'doh' 
    ) 
); 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('http://example.com/submit.php', false, $context); 

, oradaki (sağ seçenekleri ile bir akış oluşturmak zorunda o sayfadaki tam liste) ve file_get_contents üçüncü parametre olarak kullanmak - bir not olarak fazla bir şey ;-)


: genel olarak, HTTP POST isteklerini göndermek için, çok fazla seçenek sunan bir curl kullanmaya eğilimliyiz - ama akışlar PHP'nin hiç kimsenin bilmediği güzel şeylerden biri ... çok kötü ...

+1

Teşekkürler. İstenilen sayfaya aynı POST paramlarını geçmem gerekirse $ _POST içeriğini $ postdata'ya ekleyebileceğimi tahmin ediyorum. –

+5

Sanırım böyle bir şey yapabilirsin; ama 'içerik 'bir PHP dizisi olmamalıdır: bir querystring * olması gerekir (yani bu formata sahip olmalıdır:' param1 = value1 & param2 = value2 & param3 = value3') * ;; Bu muhtemelen "http_build_query ($ _ POST)' –

+1

Harika! POST verilerini, $ postdata = http_build_query ($ _ POST) 'yaparak başarılabilen başka bir sayfaya iletmenin bir yolunu arıyordum. –

14

bir alternatif, ayrıca fopen

$params = array('http' => array(
    'method' => 'POST', 
    'content' => 'toto=1&tata=2' 
)); 

$ctx = stream_context_create($params); 
$fp = @fopen($sUrl, 'rb', false, $ctx); 
if (!$fp) 
{ 
    throw new Exception("Problem with $sUrl, $php_errormsg"); 
} 

$response = @stream_get_contents($fp); 
if ($response === false) 
{ 
    throw new Exception("Problem reading data from $sUrl, $php_errormsg"); 
} 
+0

Nedense, bu benim için çalıştı, ancak PHP resmi örneği yapmadı. Ayrıca toto = 1 & tata = 2' için +1. Ancak, fopen'i kullanmadım. –

+1

@ Ġiĺàɗ Burada insanların noob'u yok. Bu, buna karşı samimi bir uyarıdır. – Daedalus

1
$sUrl = 'http://www.linktopage.com/login/'; 
    $params = array('http' => array(
    'method' => 'POST', 
'content' => 'username=admin195&password=d123456789' 
)); 

$ctx = stream_context_create($params); 
$fp = @fopen($sUrl, 'rb', false, $ctx); 
if (!$fp) 
{ 
throw new Exception("Problem with $sUrl, $php_errormsg"); 
} 

$response = @stream_get_contents($fp); 
if ($response === false) 
{ 
throw new Exception("Problem reading data from $sUrl, $php_errormsg"); 
} 
İlgili konular