cURL , get redirect url to a variable

前端 未结 4 1161
一整个雨季
一整个雨季 2020-11-27 17:50

I\'m using curl to fill a form. After completion of the post the other script which handles the form is redirecting to another URL. I want to get this redirect URL into a va

相关标签:
4条回答
  • 2020-11-27 18:02

    You would use

    curl_setopt($CURL, CURLOPT_HEADER, TRUE);
    

    And parse the headers for the location header

    0 讨论(0)
  • 2020-11-27 18:07

    You may want to set the CURLOPT_FOLLOWLOCATION to true.

    Or set the CURLOPT_HEADER to true and then use regexp to get the Location header.

    0 讨论(0)
  • 2020-11-27 18:21

    Here I get the resource http headers then I parse the headers out into an array $retVal. I got the code for parsing the headers from here (http://www.bhootnath.in/blog/2010/10/parse-http-headers-in-php/) You could also use http://php.net/manual/en/function.http-parse-headers.php if you have (PECL pecl_http >= 0.10.0)

            $ch = curl_init();
            $timeout = 0;
            curl_setopt ($ch, CURLOPT_URL, $url);
            curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_HEADER, TRUE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
            // Getting binary data
            $header = curl_exec($ch);
            $retVal = array();
            $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
            foreach( $fields as $field ) {
                if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
                    $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
                    if( isset($retVal[$match[1]]) ) {
                        $retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                    } else {
                        $retVal[$match[1]] = trim($match[2]);
                    }
                }
            }
    //here is the header info parsed out
    echo '<pre>';
    print_r($retVal);
    echo '</pre>';
    //here is the redirect
    if (isset($retVal['Location'])){
         echo $retVal['Location'];
    } else {
         //keep in mind that if it is a direct link to the image the location header will be missing
         echo $_GET[$urlKey];
    }
    curl_close($ch);
    
    0 讨论(0)
  • 2020-11-27 18:22

    Easy way to find the redirected url (if you don't want to know in advance)

    $last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    
    0 讨论(0)
提交回复
热议问题