помогите мне получить URL местоположения из заголовка ответа
Вам нужно получить информацию из вашего запроса Curl и получить оттуда заголовок.
Вот ваш код:
$ip = getUserIP() ;
$data = 'done=true&submit=Download+Now';
$headers = array(
$data,
'Content-Type: application/x-www-form-urlencoded',
'Referer: http://thgss.com/index.php?p=download2',
'X-Forwarded-For: '. $ip
);
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://thgss.com/index.php?p=download3');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36');
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
var_dump($response);
Перед вашим curl_close
добавьте следующее:
$curl_info = curl_getinfo($curl_handle);
Затем вы можете использовать preg_match
, чтобы найти заголовок вашего местоположения:
$headers = substr($response, 0, $curl_info["header_size"]);
preg_match('#Location: (.*)#', $headers, $location);
Затем вы должны найти свой заголовок Location в $location
, вероятно, $location[1]
.
На заметке, это имя пользователя и пароль, которые вы отправляете в заголовке?
Редактировать:
Поскольку исходный вопрос был изменен с тех пор, как я ответил на него, я сейчас редактирую свой ответ.
Чтобы помочь вам отладить любые ошибки с фактическим запросом скручивания, до curl_close
вы можете добавить:
$errs = curl_error($curl_handle);
$errs
теперь предоставит вам любые причины, по которым запрос curl может быть неудачным.Пример ошибки:
«Невозможно подтвердить подлинность сертификата однорангового узла с помощью известных сертификатов CA»
Более подробную информацию можно найти в документации: http://php.net/manual/en/function.curl-error.php
Редактировать 2:
После того, как вы сказали, что у вас проблема с тайм-аутом, я теперь замечаю, что вы использовали 2 секунды: curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
...
Попробуйте увеличитьтаймаут:
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 30);
Вы также можете использовать 0
, который должен ждать бесконечно.