Can PHP cURL retrieve response headers AND body in a single request?

后端 未结 13 1995
粉色の甜心
粉色の甜心 2020-11-22 03:28

Is there any way to get both headers and body for a cURL request using PHP? I found that this option:

curl_setopt($ch, CURLOPT_HEADER, true);
13条回答
  •  广开言路
    2020-11-22 03:45

    Curl has a built in option for this, called CURLOPT_HEADERFUNCTION. The value of this option must be the name of a callback function. Curl will pass the header (and the header only!) to this callback function, line-by-line (so the function will be called for each header line, starting from the top of the header section). Your callback function then can do anything with it (and must return the number of bytes of the given line). Here is a tested working code:

    function HandleHeaderLine( $curl, $header_line ) {
        echo "
    YEAH: ".$header_line; // or do whatever return strlen($header_line); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADERFUNCTION, "HandleHeaderLine"); $body = curl_exec($ch);

    The above works with everything, different protocols and proxies too, and you dont need to worry about the header size, or set lots of different curl options.

    P.S.: To handle the header lines with an object method, do this:

    curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$object, 'methodName'))
    

提交回复
热议问题