Как я могу получить целевой URL с помощью ЗАВИХРЕНИЯ?

Чтобы подробно остановиться ответ Sparr

, Инициализация и присвоение являются двумя отличными операциями, которые, оказывается, используют тот же оператор (" = ") здесь.

Думают о нем как это:

Предполагают, что существует 2 функции, вызванные InitializeObject, и AssignObject. Когда компилятор видит thing = value, он смотрит на контекст и называет один InitializeObject при создании нового thing. Если Вы не, это вместо этого звонит AssignObject.

Обычно это прекрасно, поскольку InitializeObject и AssignObject обычно ведут себя тот же путь. Кроме тех случаев, когда, имея дело с массивами символов (и несколько других пограничных случаев), в этом случае они ведут себя по-другому. Почему делают это? Хорошо это - целое другое сообщение, включающее стек по сравнению с "кучей" и т. д. и т. п.

пз: Как в стороне, думая это таким образом также поможет Вам понять конструкторов копии и другие такие вещи, если Вы когда-нибудь будете рисковать в C++

35
задан John Bachir 13 September 2012 в 16:33
поделиться

4 ответа

Вы должны получить заголовок Location для перенаправленного URL.

5
ответ дан 27 November 2019 в 06:40
поделиться

Новое место назначения для перенаправления 302 находится в поле заголовка http "местоположение". Пример:

HTTP/1.1 302 Found
Date: Tue, 30 Jun 2002 1:20:30 GMT
Server: Apache
Location: http://www.foobar.com/foo/bar
Content-Type: text/html; charset=iso-8859-1

Просто введите его с помощью регулярного выражения.

Чтобы включить всю информацию заголовка HTTP, включите ее в результат с помощью параметра curl CURLOPT_HEADER . Установите его с помощью:

curl_setopt($c, CURLOPT_HEADER, true);

Если вы просто хотите, чтобы curl следовал за перенаправлением, используйте CURLOPT_FOLLOWLOCATION :

curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);

В любом случае вы не должны использовать новый URI, потому что код состояния HTTP 302 является только временным перенаправление.

2
ответ дан 27 November 2019 в 06:40
поделиться

Здесь ' Это способ получить все заголовки, возвращаемые http-запросом curl, а также код состояния и массив строк заголовков для каждого заголовка.

$url = 'http://google.com';
$opts = array(CURLOPT_URL => $url,
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_HEADER => true,
              CURLOPT_FOLLOWLOCATION => true);

$ch = curl_init();
curl_setopt_array($ch, $opts);
$return = curl_exec($ch);
curl_close($ch);

$headers = http_response_headers($return);
foreach ($headers as $header) {
    $str = http_response_code($header);
    $hdr_arr = http_response_header_lines($header);
    if (isset($hdr_arr['Location'])) {
        $str .= ' - Location: ' . $hdr_arr['Location'];
    }
    echo $str . '<br />';
}

function http_response_headers($ret_str)
{
    $hdrs = array();
    $arr = explode("\r\n\r\n", $ret_str);
    foreach ($arr as $each) {
        if (substr($each, 0, 4) == 'HTTP') {
            $hdrs[] = $each;
        }
    }
    return $hdrs;
}

function http_response_header_lines($hdr_str)
{
    $lines = explode("\n", $hdr_str);
    $hdr_arr['status_line'] = trim(array_shift($lines));
    foreach ($lines as $line) {
        list($key, $val) = explode(':', $line, 2);
        $hdr_arr[trim($key)] = trim($val);
    }
    return $hdr_arr;
}

function http_response_code($str)
{
    return substr(trim(strstr($str, ' ')), 0, 3);
}
1
ответ дан 27 November 2019 в 06:40
поделиться

Используйте curl_getinfo ($ ch) , и первый элемент ( url ) укажет эффективный URL.

0
ответ дан 27 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: