PHP 5.4.35 Released

گزینه‌های متن HTTP

گزینه‌های متن HTTPفهرست گزینه‌های متن HTTP

Description

گزینه‌های متن برای http:// و https:// .

Options

method string

GET٬ POST٬ یا هر متد دیگر HTTP پشتیبانی شده در سرور دور.

مقدار پیشفرض GET.

header string

سرآیند‌های اضافی در طول درخواست. مقادیر در این گزینه هر مقدار دیگری را بازنویسی خواهد کرد (مانند User-agent:٬ Host:٬ و Authentication:).

user_agent string

مقدار فرستاده شده با سرآیند User-Agent:. این مقدار استفاده خواهد شد اگر user-agent در گزینه متن header بالا تعیین نشده باشد.

بطور پیشفرض تنظیمات php.ini برای user_agent استفاده می‌شود.

content string

اطلاعات اضافی پس از سرآیند فرستاده خواهد شد. عموما با درخواستذهای POST یا PUT استفاده خواهد شد.

proxy string

URI تعیین کننده آدرس پروکسی سرور. (مانند tcp://proxy.example.com:5100).

request_fulluri boolean

زمانی که برابر با TRUE باشد تمام URI هنگام ساختن درخواست استفاده خواهد شد. (مانند GET http://www.example.com/path/to/file.html HTTP/1.0). در حالی که این درخواست استاندارد نیست بعضی سرورهای پروکسی به آن نیاز دارند.

مقدار پیشفرض FALSE.

max_redirects integer

تعداد بیشترین تغییر مسیرهای پی در پی. مقدار 1 یا کمتر اجازه تغییر مسیرهای پی در پی را نخواهد داد.

بصورت پیشفرض 20.

protocol_version float

نسخه پروتکل HTTP.

مقدار پیشفرض 1.0.

Note:

PHP پیش از 5.3.0 کدگشایی انتقال chunked را انجام نمی‌داد. اگر مقدار 1.1 باشد شما باید مطابق با1.1 عمل کنید.

timeout float

ثانیه‌های زمان سپری شده را به ثانبه می‌خواند که توسط یک float مشخص می‌شود (مانند 10.5).

بصورت پیشفرض تنظیمات php.ini برای default_socket_timeout استفاده می‌شود.

ignore_errors boolean

دریافت متن حتی برای کدهای خطا.

مقدار پیشفرض FALSE

Changelog

Version Description
5.3.0 ignore_errors اضافه شد.
5.2.10 ignore_errors اضافه شد.
5.2.10 header می‌تواند بصورت array اندیس‌دار عددی باشد.
5.2.1 timeout اضافه شد.
5.1.0 پروکسی HTTPS از طریق پروکسی HTTP اضافه شد.
5.1.0 max_redirects اضافه شد.
5.1.0 protocol_version اضافه شد.

Examples

Example #1 دریافت یک صفحه و ارسال اطلاعات POST

<?php

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

?>

Example #2 نادیده گرفتن تغییر مسیر ولی گرفتن fetch header و محتوا

<?php

$url 
"http://www.example.org/header.php";

$opts = array(
       
'http' => array('method' => 'GET',
                                       
'max_redirects' => '0',
                                       
'ignore_errors' => '1')
       );

$context stream_context_create($opts);
$stream fopen($url'r'false$context);

// header information as well as meta data
// about the stream
var_dump(stream_get_meta_data($stream));

// actual data at $url
var_dump(stream_get_contents($stream));
fclose($stream);
?>

Notes

Note: گزینه‌های متن جریان زیرین سوکت
گزینه‌های متن اضافی ممکن است توسط زیرساختار انتقال برای جریان‌های http:// ارجاع دهنده به گزینه‌های متن برای انتقال tcp:// استفاده شود. برای جریان‌های https:// به گزینه‌های متن برای انتقال ssl:// ارجاع کنید.

add a note add a note

User Contributed Notes 5 notes

up
4
vchampion at gmail dot com
2 years ago
If you use the proxy server and encounter an error "fopen(http://example.com): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request" note that in many situations you need also set the parameter "request_fulluri" to "true" in your stream options. Without this option the php script sends the empty request to the server as "GET / HTTP/0.0" and the proxy server replies to it with the "HTTP 400" error.

For example (working sample):
<?php
$stream
= stream_context_create(Array("http" => Array("method"  => "GET",
                                                     
"timeout" => 20,
                                                     
"header"  => "User-agent: Myagent",
                                                     
"proxy"   => "tcp://my-proxy.localnet:3128",
                                                     
'request_fulluri' => True /* without this option we get an HTTP error! */
                               
)));

if (
$fp = fopen("http://example.com", 'r', false, $stream) ) {
    print
"well done";
}
?>

P>S> PHP 5.3.17
up
2
nate
7 months ago
Note that if you set the protocol_version option to 1.1 and the server you are requesting from is configured to use keep-alive connections, the function (fopen, file_get_contents, etc.) will "be slow" and take a long time to complete. This is a feature of the HTTP 1.1 protocol you are unlikely to use with stream contexts in PHP.

Simply add a "Connection: close" header to the request to eliminate the keep-alive timeout:

<?php
// php 5.4 : array syntax and header option with array value
$data = file_get_contents('http://www.example.com/', null, stream_context_create([
   
'http' => [
       
'protocol_version' => 1.1,
       
'header'           => [
           
'Connection: close',
        ],
    ],
]));
?>
up
1
chris
9 months ago
I had quite a bit of trouble trying to make a request with fopen through a proxy to a secure url.  I kept getting a 400 Bad Request back from the remote host.  It was receiving the proxy url as the SNI host.  In order to get around this I had to explicity set the SNI host to the domain I was trying to reach.  It's apparently the issue outlined in this bug:

https://bugs.php.net/bug.php?id=63519

<?php
$domain
= parse_url($file, PHP_URL_HOST);
$proxy_string = "tcp://" . WP_PROXY_HOST  . ":" . WP_PROXY_PORT;
$opts = array(
   
'http' => array( 'proxy' => $proxy_string ),
   
'ssl' => array( 'SNI_enabled' => true, 'SNI_server_name' => $domain));
$context = stream_context_create($opts);
$handle = fopen( $file, 'r', false, $context );
?>
up
0
gourav sarkar
3 years ago
watch your case when using methods (POST and GET)...it must be always uppercase. in case of you write it in lower case it wont work.
up
-7
TxRx
4 years ago
Note that if the server is not able to 'getaddresses' change the name to an ip address and that'll sort that out for internal looking calls and posts.
To Top