PHP.mk документација

Опции на HTTP контекстот

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

context.http.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека context.http.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Опции на HTTP контекстот

Референца за `context.http.php` со подобрена типографија и навигација.

context.http.php

Опции на HTTP контекстот

Опции на HTTP контекстотHTTP контекст опции листање

= NULL

Опции за контекст за http:// and https:// transports.

Опции

method string

GET, POST, или кој било друг HTTP метод поддржан од далечинскиот сервер.

Стандардно е GET.

header array or string

Дополнителни заглавија што треба да се испратат за време на барањето. Вредностите во оваа опција ќе ги надминат другите вредности (како што се User-agent:, Host:Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во Authentication:), дури и кога следат Location: пренасочувања. Затоа не се препорачува да се постави Host: заглавие, ако follow_location е овозможено.

Вредноста на низата треба да биде Key: value парови разделени со \r\n, на пр. "Content-Type: application/json\r\nConnection: close". Вредноста на низата треба да биде список од Key: value парови, на пр. ["Content-Type: application/json", "Connection: close"].

user_agent string

Вредност што треба да се испрати со User-Agent: заглавие. Оваа вредност ќе се користи само ако корисничкиот агент е not наведен во header контекст опцијата погоре.

Стандардно user_agent php.ini поставката се користи.

content string

Дополнителни податоци што треба да се испратат по заглавијата. Обично се користи со POST или PUT барања.

proxy string

URI што ја специфицира адресата на прокси серверот (на пр. tcp://proxy.example.com:5100).

request_fulluri bool

Кога е поставено на true, целата URI ќе се користи при конструирање на барањето (на пр. GET http://www.example.com/path/to/file.html HTTP/1.0). Иако ова е нестандарден формат на барање, некои прокси-сервери го бараат тоа.

Стандардно е false.

follow_location int

Следи Location пренасочувања во заглавјето. Постави на 0 за да се оневозможи.

Стандардно е 1.

max_redirects int

Максимален број на пренасочувања за следење. Вредност 1 или помалку значи дека не се следат пренасочувања.

Стандардно е 20.

protocol_version float

Верзија на протоколот HTTP.

Стандардно е 1.1 од PHP 8.0.0; пред таа верзија стандардно беше 1.0.

timeout float

Време на истекување на читањето во секунди, специфицирано од float (на пр. 10.5).

Стандардно default_socket_timeout php.ini поставката се користи.

ignore_errors bool

Преземи ја содржината дури и при кодови за статус на неуспех.

Стандардно е false.

Примери

Пример #1 Преземи страница и испрати POST податоци

<?php

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

$opts = [
'http' => [
'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);

?>

Пример #2 Игнорирај пренасочувања, но преземи заглавја и содржина

<?php

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

$opts = [
'http' => [
'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);
?>

Белешки

Забелешка: Опции за контекст на основниот сокет поток
Дополнителни опции за контекст може да бидат поддржани од основниот транспорт За http:// потоци, погледнете ги опциите за контекст за tcp:// транспорт. За https:// потоци, погледнете ги опциите за контекст за ssl:// transport.

Забелешка: HTTP статус линија
Кога овој обвивач на поток следи пренасочување, на wrapper_data вратено од stream_get_meta_data() можеби не содржи нужно HTTP статус линија што всушност се однесува на податоците за содржината на индекс 0.

array (
  'wrapper_data' =>
  array (
    0 => 'HTTP/1.0 301 Moved Permanently',
    1 => 'Cache-Control: no-cache',
    2 => 'Connection: close',
    3 => 'Location: http://example.com/foo.jpg',
    4 => 'HTTP/1.1 200 OK',
    ...
Првото барање врати 301 (траен пренасочување), така што обвивката на потокот автоматски го следеше пренасочувањето за да добие 200 одговор (индекс = 4).

Белешки од корисници за да означиме кој било валиден PHP израз.

nate
пред 11 години
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',
        ],
    ],
]));
?>
daniel точка peder на gmail точка com
пред 8 години
note that for both http and https protocols require the same 'http' context keyword:

<?php

// CORRECT example:
// this will work as expected
// note the url with https but context with http
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('http' => array(...))));

// INVALID example:
// this will not work, the context will be ignored
// note the url with https also context with https
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('https' => array(...))));
Tr909 at com dot nospam dot bigfoot
пред 5 години
With the default of 

    'follow_location'   =>  1

be certain NEVER include a "Host:" header in the 'header' array.

If the host is set to "mydomain.com", and that web site has a (quite common) redirect to "www.mydomain.com", then the initial request to "http://mydomain.com" will get the expected response of:

HTTP/1.1 301 Moved Permanently
Location: http://www.mydomain.com/

However, the follow-up request does NOT replace the original "host" header with the new "location" value, as one would expect. Consequently each "follow-location" request will again be served by the original host of "http://mydomain.com", and continue the redirect loop until 'max_redirects' has been exhausted.

(For details: https://bugs.php.net/bug.php?id=77889)
daniel.peder (a) gmail.com
пред 8 години
note that both http and https transports require the same context name http

// OK example:
// this will work as expected
// note the url with https but context with http
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('http' => array(...))));

// INVALID example:
// this will not work, the context will be ignored
// note the url with https also context with https
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('https' => array(...))));
ywarnier на beeznest dot org
пред 8 години
Note that setting request_fulluri to true will *change* the value of $_SERVER['REQUEST_URI] on the receiving end (from /abc.php to http://domain.com/abc.php).
гурав саркар
пред 15 години
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.
aruntechguy на outlook точка com
пред 8 години
If you want to use Basic Auth while using get_headers(), use stream_context options below. 

I am using HEAD method here, but please feel free to use GET also.

<?php
$targetUrl = 'http or https target url here';
$basicAuth = base64_encode('username:password');

stream_context_set_default(
    [
        'http' => [
            'method' => 'HEAD',
            'header' => 'Authorization: Basic ' . $basicAuth
        ]
    ]
);
$result = get_headers($targetUrl);

print_r($result);
njt1982 на yahoo точка com
пред 1 година
It's worth noting that the `header` array seems to only want an array of strings, not an associative array.

I just spent a chunk of time debugging something not working as expected (no errors though) which was fixed by converting an associative array of headers into a simple array of strings.
vchampion на gmail точка com
пред 13 години
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
jay
пред 10 години
Remember to match content with Content-type:

<?php

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

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',  // here...
        'content' => json_encode($data)  // and here.
    )
);

. . .

?>
chris
12 години пред
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 );
?>
bigtree на 29a точка nl
пред 1 година
If you pass the 'header' option as a string and you have multiple headers, they must be separated by "\r\n".
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.