Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Content-Type from cURL

Tags:

php

curl

header

This works great to get the header

 $imageurl = "http://p.twimg.com/AW2-vIUCAAE_1FN.png";

  $ch = curl_init();
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_URL, $image_url);
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
  curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_HEADER, true); 
  curl_setopt($ch, CURLOPT_NOBODY, true);

  $content = curl_exec ($ch);

  curl_close ($ch);

  print_r($content);

returning

HTTP/1.1 200 OK
Server: nginx
X-peep-host: den2twapi014
Last-Modified: Mon, 15 Aug 2011 03:41:50 GMT
ETag: "7283847-dbb8-4aa830b1dabf0"
Accept-Ranges: bytes
Content-Length: 56248
Cache-Control: public, max-age=21600
Expires: Wed, 28 Mar 2012 15:53:57 GMT
Content-Type: image/png
X-CDN: AKAM
Date: Wed, 28 Mar 2012 09:53:57 GMT
Connection: keep-alive

what is the best way to echo out the Content-Type: ?

like image 859
daihovey Avatar asked Mar 28 '12 10:03

daihovey


People also ask

What is Content-Type in curl?

Content-Type - Everything curl. Content-Type. POSTing with curl's -d option will make it include a default header that looks like Content-Type: application/x-www-form-urlencoded . That is what your typical browser will use for a plain POST. Many receivers of POST data do not care about or check the Content-Type header.

How do I see response headers in curl?

We can use curl -v or curl -verbose to display the request headers and response headers in the cURL command. The > lines are request headers . The < lines are response headers .

Can I use curl in Python?

In Python, cURL transfers requests and data to and from servers using PycURL. PycURL functions as an interface for the libcURL library within Python. Almost every programming language can use REST APIs to access an endpoint hosted on a web server.


1 Answers

Before you call curl_close(), call curl_getinfo():

$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
echo $contentType;

Alternatively, if you want a parsed array of the head, here is a quick and dirty solution (WARNING: this does nothing to validate that the supplied string actually is an HTTP response, use with caution):

<?php

  function parse_http_head ($str) {

    $result = array();

    // Split into lines
    $lines = explode("\r\n", $str);

    // Handle response line
    $line = explode(' ', array_shift($lines), 3);
    $version = explode('/', $line[0]);
    $result['version'] = (float) $version[1];
    $result['code'] = (int) $line[1];
    $result['text'] = $line[2];

    // Parse headers
    $result['headers'] = array();
    while ($line = trim(array_shift($lines))) {
      list($name, $val) = explode(':', $line, 2);
      $name = strtolower(trim($name)); // Header names are case-insensitive, so convert them all to lower case so we can easily use isset()
      if (isset($result['headers'][$name])) { // Some headers (like Set-Cookie:) may appear more than once, so convert them to an array if necessary
        $result['headers'][$name] = (array) $result['headers'][$name];
        $result['headers'][$name][] = trim($val);
      } else {
        $result['headers'][$name] = trim($val);
      }
    }

    return $result;

  }

  // $content comes from your code above
  $parsed = parse_http_head($content);
  print_r($parsed);

/*
 Output:

Array
(
    [version] => 1.1
    [code] => 200
    [text] => OK
    [headers] => Array
        (
            [server] => nginx
            [x-peep-host] => den2twapi014
            [last-modified] => Mon, 15 Aug 2011 03:41:50 GMT
            [etag] => "7283847-dbb8-4aa830b1dabf0"
            [accept-ranges] => bytes
            [content-length] => 56248
            [cache-control] => public, max-age=21600
            [expires] => Wed, 28 Mar 2012 15:53:57 GMT
            [content-type] => image/png
            [x-cdn] => AKAM
            [date] => Wed, 28 Mar 2012 09:53:57 GMT
            [connection] => keep-alive
        )

)

*/
like image 63
DaveRandom Avatar answered Oct 05 '22 03:10

DaveRandom