Как предотвратить перенаправление после использования PHP cURL для загрузки изображений на другой сайт? - PullRequest
1 голос
/ 26 января 2011

На сайте есть форма, позволяющая загружать по одному изображению за раз.Я использую php cURL для загрузки нескольких изображений из zip-файла, который работает.

Я хотел бы видеть ответ curl_exec и данные curl_getinfo в браузере после завершения загрузки.Тем не менее, я могу видеть их только в течение доли секунды, прежде чем я перенаправлен на сайт, на который были загружены изображения:

$ch = curl_init($this->aData['urlData']['actionUrl']);

    foreach ($this->aData['images'] as $aFile)
    {
        $sUploadFile = $this->curlUploadFilename($aFile);

        $aPostData = array('sFromUrl' => $sFromUrl, 'token' => $sToken, 'uploadfile' => $sUploadFile, 'upload' => 1);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
        curl_setopt($ch, CURLOPT_COOKIE, $sCookies);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $aPostData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

        $aResponse = curl_exec($ch);

        if(curl_errno($ch) != 0)
        {
            $this->sErrorMsg = "POST cURL Error:\r\n" . curl_error($ch) . "\r\n";
            curl_close($ch);
            return false;
        }

        $aTempInfo[] = array('image' => $aFile, 'curlInfo' => curl_getinfo($ch), 'curlResponse' => $aResponse);
    }

    $this->aInfo = $aTempInfo;
    curl_close($ch);
    return true;

У меня установлено значение CURLOPT_FOLLOWLOCATION в False, и оно все еще перенаправляет.Я не в safe_mode, и open_basedir не установлен.

Я добавил CURLOPT_NOBODY как True и CURLOPT_CUSTOMREQUEST как POST (чтобы удержать запрос от переключения на HEAD).Я получаю разные результаты:

  • Если добавлено после CURLOPT_POSTFIELDS, я не перенаправлен, но загрузка не удалась.

  • Если добавлено раньше, загрузка прошла успешно, ноЯ все еще перенаправлен.

Я знаю, что должны делать CURLOPT_HEADER и CURLINFO_HEADER_OUT, но я установил для них обоих значение False, просто чтобы посмотреть, имеет ли это значение, но я все еще перенаправлен.

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Я знаю, что это старый пост, но я отвечаю. Я верю, что когда вы повторяете результаты, в ответе присутствует некоторый JavaScript, который выполняет перенаправление. Попробуйте создать дамп ответа на файл, а не в браузере, и посмотрите, есть ли там какой-либо javascript, если он найден, удалите виновную часть сценария, выполнив str_replace() или что-то еще, а затем отобразите вывод.

0 голосов
/ 26 января 2011

удалить URL из вашего curl_init ();и укажите его, используя CURLOPT_URL:

curl_setopt($ch, CURLOPT_URL, $this->aData['urlData']['actionUrl']);
...