1<?php 2include_once __DIR__ . '/../../include/shared-manual.inc'; 3$TOC = array(); 4$PARENTS = array(); 5include_once __DIR__ ."/toc/context.inc"; 6$setup = array ( 7 'home' => 8 array ( 9 0 => 'index.php', 10 1 => 'PHP Manual', 11 ), 12 'head' => 13 array ( 14 0 => 'UTF-8', 15 1 => 'en', 16 ), 17 'this' => 18 array ( 19 0 => 'context.http.php', 20 1 => 'HTTP context options', 21 ), 22 'up' => 23 array ( 24 0 => 'context.php', 25 1 => 'Context options and parameters', 26 ), 27 'prev' => 28 array ( 29 0 => 'context.socket.php', 30 1 => 'Socket context options', 31 ), 32 'next' => 33 array ( 34 0 => 'context.ftp.php', 35 1 => 'FTP context options', 36 ), 37 'alternatives' => 38 array ( 39 ), 40); 41$setup["toc"] = $TOC; 42$setup["parents"] = $PARENTS; 43manual_setup($setup); 44 45?> 46<div id="context.http" class="refentry"> 47 <div class="refnamediv"> 48 <h1 class="refname">HTTP context options</h1> 49 <p class="refpurpose"><span class="refname">HTTP context options</span> — <span class="dc-title">HTTP context option listing</span></p> 50 51 </div> 52 53 <div class="refsect1 description" id="refsect1-context.http-description"> 54 <h3 class="title">Description</h3> 55 <p class="para"> 56 Context options for <em>http://</em> and <em>https://</em> 57 transports. 58 </p> 59 </div> 60 61 62 <div class="refsect1 options" id="refsect1-context.http-options"> 63 <h3 class="title">Options</h3> 64 <p class="para"> 65 <dl> 66 67 <dt id="context.http.method"> 68 <span class="term"> 69 <em><code class="parameter">method</code></em> 70 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 71 </span> 72 <dd> 73 74 <p class="para"> 75 <strong><code>GET</code></strong>, <strong><code>POST</code></strong>, or 76 any other HTTP method supported by the remote server. 77 </p> 78 <p class="para"> 79 Defaults to <strong><code>GET</code></strong>. 80 </p> 81 </dd> 82 83 </dt> 84 85 <dt id="context.http.header"> 86 <span class="term"> 87 <em><code class="parameter">header</code></em> 88 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 89 </span> 90 <dd> 91 92 <p class="para"> 93 Additional headers to be sent during request. Values 94 in this option will override other values (such as 95 <em>User-agent:</em>, <em>Host:</em>, 96 and <em>Authentication:</em>). 97 </p> 98 </dd> 99 100 </dt> 101 102 <dt id="context.http.user-agent"> 103 <span class="term"> 104 <em><code class="parameter">user_agent</code></em> 105 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 106 </span> 107 <dd> 108 109 <p class="para"> 110 Value to send with <em>User-Agent:</em> header. This value will 111 only be used if user-agent is <em class="emphasis">not</em> specified 112 in the <em>header</em> context option above. 113 </p> 114 <p class="para"> 115 By default the 116 <a href="filesystem.configuration.php#ini.user-agent" class="link">user_agent</a> 117 <var class="filename">php.ini</var> setting is used. 118 </p> 119 </dd> 120 121 </dt> 122 123 <dt id="context.http.content"> 124 <span class="term"> 125 <em><code class="parameter">content</code></em> 126 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 127 </span> 128 <dd> 129 130 <p class="para"> 131 Additional data to be sent after the headers. Typically used 132 with POST or PUT requests. 133 </p> 134 </dd> 135 136 </dt> 137 138 <dt id="context.http.proxy"> 139 <span class="term"> 140 <em><code class="parameter">proxy</code></em> 141 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 142 </span> 143 <dd> 144 145 <p class="para"> 146 URI specifying address of proxy server. (e.g. 147 <em>tcp://proxy.example.com:5100</em>). 148 </p> 149 </dd> 150 151 </dt> 152 153 <dt id="context.http.request-fulluri"> 154 <span class="term"> 155 <em><code class="parameter">request_fulluri</code></em> 156 <span class="type"><a href="language.types.boolean.php" class="type boolean">boolean</a></span> 157 </span> 158 <dd> 159 160 <p class="para"> 161 When set to <strong><code>TRUE</code></strong>, the entire URI will be used when 162 constructing the request. (i.e. 163 <em>GET http://www.example.com/path/to/file.html HTTP/1.0</em>). 164 While this is a non-standard request format, some 165 proxy servers require it. 166 </p> 167 <p class="para"> 168 Defaults to <strong><code>FALSE</code></strong>. 169 </p> 170 </dd> 171 172 </dt> 173 174 <dt id="context.http.follow-location"> 175 <span class="term"> 176 <em><code class="parameter">follow_location</code></em> 177 <span class="type"><a href="language.types.integer.php" class="type integer">integer</a></span> 178 </span> 179 <dd> 180 181 <p class="para"> 182 Follow <em>Location</em> header redirects. Set to 183 <em>0</em> to disable. 184 </p> 185 <p class="para"> 186 Defaults to <em>1</em>. 187 </p> 188 </dd> 189 190 </dt> 191 192 <dt id="context.http.max-redirects"> 193 <span class="term"> 194 <em><code class="parameter">max_redirects</code></em> 195 <span class="type"><a href="language.types.integer.php" class="type integer">integer</a></span> 196 </span> 197 <dd> 198 199 <p class="para"> 200 The max number of redirects to follow. Value <em>1</em> or 201 less means that no redirects are followed. 202 </p> 203 <p class="para"> 204 Defaults to <em>20</em>. 205 </p> 206 </dd> 207 208 </dt> 209 210 <dt id="context.http.protocol-version"> 211 <span class="term"> 212 <em><code class="parameter">protocol_version</code></em> 213 <span class="type"><a href="language.types.float.php" class="type float">float</a></span> 214 </span> 215 <dd> 216 217 <p class="para"> 218 HTTP protocol version. 219 </p> 220 <p class="para"> 221 Defaults to <em>1.0</em>. 222 </p> 223 <blockquote class="note"><p><strong class="note">Note</strong>: 224 <p class="para"> 225 PHP prior to 5.3.0 does not implement chunked transfer decoding. 226 If this value is set to <em>1.1</em> it is your 227 responsibility to be <em>1.1</em> compliant. 228 </p> 229 </p></blockquote> 230 </dd> 231 232 </dt> 233 234 <dt id="context.http.timeout"> 235 <span class="term"> 236 <em><code class="parameter">timeout</code></em> 237 <span class="type"><a href="language.types.float.php" class="type float">float</a></span> 238 </span> 239 <dd> 240 241 <p class="para"> 242 Read timeout in seconds, specified by a <span class="type"><a href="language.types.float.php" class="type float">float</a></span> 243 (e.g. <em>10.5</em>). 244 </p> 245 <p class="para"> 246 By default the 247 <a href="filesystem.configuration.php#ini.default-socket-timeout" class="link">default_socket_timeout</a> 248 <var class="filename">php.ini</var> setting is used. 249 </p> 250 </dd> 251 252 </dt> 253 254 <dt id="context.http.ignore-errors"> 255 <span class="term"> 256 <em><code class="parameter">ignore_errors</code></em> 257 <span class="type"><a href="language.types.boolean.php" class="type boolean">boolean</a></span> 258 </span> 259 <dd> 260 261 <p class="para"> 262 Fetch the content even on failure status codes. 263 </p> 264 <p class="para"> 265 Defaults to <strong><code>FALSE</code></strong>. 266 </p> 267 </dd> 268 269 </dt> 270 271 </dl> 272 273 </p> 274 </div> 275 276 277 <div class="refsect1 changelog" id="refsect1-context.http-changelog"> 278 <h3 class="title">Changelog</h3> 279 <p class="para"> 280 <table class="doctable informaltable"> 281 282 <thead> 283 <tr> 284 <th>Version</th> 285 <th>Description</th> 286 </tr> 287 288 </thead> 289 290 <tbody class="tbody"> 291 <tr> 292 <td>5.3.4</td> 293 <td> 294 Added <em><code class="parameter">follow_location</code></em>. 295 </td> 296 </tr> 297 298 <tr> 299 <td>5.3.0</td> 300 <td> 301 The <em><code class="parameter">protocol_version</code></em> supports chunked transfer 302 decoding when set to <em>1.1</em>. 303 </td> 304 </tr> 305 306 <tr> 307 <td>5.2.10</td> 308 <td> 309 Added <em><code class="parameter">ignore_errors</code></em>. 310 </td> 311 </tr> 312 313 <tr> 314 <td>5.2.10</td> 315 <td> 316 The <em><code class="parameter">header</code></em> can now be an numerically indexed <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. 317 </td> 318 </tr> 319 320 <tr> 321 <td>5.2.1</td> 322 <td> 323 Added <em><code class="parameter">timeout</code></em>. 324 </td> 325 </tr> 326 327 <tr> 328 <td>5.1.0</td> 329 <td> 330 Added HTTPS proxying through HTTP proxies. 331 </td> 332 </tr> 333 334 <tr> 335 <td>5.1.0</td> 336 <td> 337 Added <em><code class="parameter">max_redirects</code></em>. 338 </td> 339 </tr> 340 341 <tr> 342 <td>5.1.0</td> 343 <td> 344 Added <em><code class="parameter">protocol_version</code></em>. 345 </td> 346 </tr> 347 348 </tbody> 349 350 </table> 351 352 </p> 353 </div> 354 355 356 <div class="refsect1 examples" id="refsect1-context.http-examples"> 357 <h3 class="title">Examples</h3> 358 <p class="para"> 359 <div class="example" id="context.http.example-post"> 360 <p><strong>Example #1 Fetch a page and send POST data</strong></p> 361 <div class="example-contents"> 362<div class="phpcode"><code><span style="color: #000000"> 363<span style="color: #0000BB"><?php<br><br>$postdata </span><span style="color: #007700">= </span><span style="color: #0000BB">http_build_query</span><span style="color: #007700">(<br> array(<br> </span><span style="color: #DD0000">'var1' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'some content'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'var2' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'doh'<br> </span><span style="color: #007700">)<br>);<br><br></span><span style="color: #0000BB">$opts </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'http' </span><span style="color: #007700">=><br> array(<br> </span><span style="color: #DD0000">'method' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'POST'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'header' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'Content-type: application/x-www-form-urlencoded'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'content' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$postdata<br> </span><span style="color: #007700">)<br>);<br><br></span><span style="color: #0000BB">$context </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">(</span><span style="color: #0000BB">$opts</span><span style="color: #007700">);<br><br></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://example.com/submit.php'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$context</span><span style="color: #007700">);<br><br></span><span style="color: #0000BB">?></span> 364</span> 365</code></div> 366 </div> 367 368 </div> 369 </p> 370 <p class="para"> 371 <div class="example" id="context.http.example-fetch-ignore-redirect"> 372 <p><strong>Example #2 Ignore redirects but fetch headers and content </strong></p> 373 <div class="example-contents"> 374<div class="phpcode"><code><span style="color: #000000"> 375<span style="color: #0000BB"><?php<br><br>$url </span><span style="color: #007700">= </span><span style="color: #DD0000">"http://www.example.org/header.php"</span><span style="color: #007700">;<br><br></span><span style="color: #0000BB">$opts </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'http' </span><span style="color: #007700">=><br> array(<br> </span><span style="color: #DD0000">'method' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'GET'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'max_redirects' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'0'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'ignore_errors' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'1'<br> </span><span style="color: #007700">)<br>);<br><br></span><span style="color: #0000BB">$context </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">(</span><span style="color: #0000BB">$opts</span><span style="color: #007700">);<br></span><span style="color: #0000BB">$stream </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #DD0000">'r'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$context</span><span style="color: #007700">);<br><br></span><span style="color: #FF8000">// header information as well as meta data<br>// about the stream<br></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">stream_get_meta_data</span><span style="color: #007700">(</span><span style="color: #0000BB">$stream</span><span style="color: #007700">));<br><br></span><span style="color: #FF8000">// actual data at $url<br></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">stream_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$stream</span><span style="color: #007700">));<br></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$stream</span><span style="color: #007700">);<br></span><span style="color: #0000BB">?></span> 376</span> 377</code></div> 378 </div> 379 380 </div> 381 </p> 382 </div> 383 384 385 <div class="refsect1 notes" id="refsect1-context.http-notes"> 386 <h3 class="title">Notes</h3> 387 <blockquote class="note"><p><strong class="note">Note</strong>: 388 <strong>Underlying socket stream context options</strong><br> 389 <span class="simpara"> 390 Additional context options may be supported by the 391 <a href="transports.inet.php" class="link">underlying transport</a> 392 For <em>http://</em> streams, refer to context 393 options for the <em>tcp://</em> transport. For 394 <em>https://</em> streams, refer to context options 395 for the <em>ssl://</em> transport. 396 </span> 397 </p></blockquote> 398 <blockquote class="note"><p><strong class="note">Note</strong>: 399 <strong>HTTP status line</strong><br> 400 <span class="simpara"> 401 When this stream wrapper follows a redirect, the 402 <em>wrapper_data</em> returned by 403 <span class="function"><a href="function.stream-get-meta-data.php" class="function">stream_get_meta_data()</a></span> might not necessarily contain 404 the HTTP status line that actually applies to the content data at index 405 <em>0</em>. 406 </span> 407 <div class="example-contents screen"> 408<div class="cdata"><pre> 409array ( 410 'wrapper_data' => 411 array ( 412 0 => 'HTTP/1.0 301 Moved Permantenly', 413 1 => 'Cache-Control: no-cache', 414 2 => 'Connection: close', 415 3 => 'Location: http://example.com/foo.jpg', 416 4 => 'HTTP/1.1 200 OK', 417 ... 418</pre></div> 419 </div> 420 <span class="simpara"> 421 The first request returned a <em>301</em> (permanent redirect), 422 so the stream wrapper automatically followed the redirect to get a 423 <em>200</em> response (index = <em>4</em>). 424 </span> 425 </p></blockquote> 426 </div> 427 428 429 <div class="refsect1 seealso" id="refsect1-context.http-seealso"> 430 <h3 class="title">See Also</h3> 431 <p class="para"> 432 <ul class="simplelist"> 433 <li class="member"><a href="wrappers.http.php" class="xref">http://</a></li> 434 <li class="member"><a href="context.socket.php" class="xref">Socket context options</a></li> 435 <li class="member"><a href="context.ssl.php" class="xref">SSL context options</a></li> 436 </ul> 437 </p> 438 </div> 439 440 441</div><?php manual_footer(); ?> 442