2016-08-02 25 views
1

Betrachten Sie diese Funktion:Wie bekomme ich Header mit Stream?

function use_fopen($url, $make_post_field, $headers = '') { 

    $context = array(
         'http' => array(
         'method' => 'POST', 
         'timeout' => '60', 
         'content' => $make_post_field) 
    ); 
    $header = "Content-type: application/x-www-form-urlencoded\r\n"; 
    if (!empty($headers)) { 
     foreach ($headers as $head) { 
       $header.="$head\r\n"; 
     } 
    } 

    $context['http']['header'] = $header; 
    $context = stream_context_create($context); 

    //$contents = @file_get_contents($url, null, $context); 
    $fp = fopen($url, 'r', false, $context); 

    $stream_meta_data = @stream_get_meta_data($fp); 
    print_r($stream_meta_data); 
    fclose($fp); 
} 

ich die Funktion wie folgt verwenden:

$headers = array ('baz: bar'); 
$data = array ('foo' => 'bar', 'bar' => 'baz'); 
$data = http_build_query($data); 
print(use_fopen("http://www.example.com/phpinfo.php", $data, $headers)); 

Als url Ziel phpinfo ist, kann ich überprüfen, ob $_POST['foo'] und

CONTENT_TYPE = application/x-www-form-urlencoded

bar gesetzt

HTTP_FOO = baz

So scheint es, Kontext funktioniert prima, aber wenn ich

$stream_meta_data = @stream_get_meta_data($fp); 
print_r($stream_meta_data); 

verwende ich bekommen

Array 
(
[timed_out] => 
[blocked] => 1 
[eof] => 
[wrapper_data] => Array 
    (
     [0] => HTTP/1.1 200 OK 
     [1] => Date: Tue, 02 Aug 2016 11:46:36 GMT 
     [2] => Server: Apache 
     [3] => Connection: close 
     [4] => Content-Type: text/html; charset=UTF-8 
    ) 

[wrapper_type] => http 
[stream_type] => tcp_socket/ssl 
[mode] => r 
[unread_bytes] => 8061 
[seekable] => 
[uri] => http://wwwexample.com/phpinfo.php 
) 

warum Inhaltstyp falsch ist und HTTP_FOO, die tatsächlich ein Header ist hier nicht gezeigt? Die Änderung unten half auch nicht. was soll ich machen? um benutzerdefinierte Header zu erhalten und Content-Type zu korrigieren?

$contents = @file_get_contents($url, null, $context); 
print_r(get_headers($url)); 

Ich suchte SO und fand diese How to get HTTP response headers after POST request in PHP? aber wie gesagt, ich versuchte, sowohl stream_get_meta_data($fp) und get_headers($url) aber ich meine nicht benutzerdefinierte Header erhalten. Was soll ich sonst machen?

Antwort

1

Haben Sie Ihren Thread von Google gefunden, da ich das gleiche Problem hatte wie Sie. Ich habe es mit der Funktion stream_context_set_default gelöst. Ich dachte, ich würde es für den nächsten von google stolpern oder wenn Sie noch eine Lösung benötigen.