2011-11-10 2 views
0

Как подражать CURLOPT_FOLLOWLOCATION? Эта функция отключена на моем веб-сервере.CURLOPT_FOLLOWLOCATION эмуляция

Я хочу получить статистику с сайта, но я не могу получить нужную страницу.

Запрос:

 
POST https://www.example.com/login HTTP/1.1 
Host: www.example.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22 
Content-Length: 200 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Origin: https://www.example.com 
Content-Type: application/x-www-form-urlencoded 
Referer: https://www.example.com/login?logout=1&final_logout=1& 
Accept-Language: ru-RU 
Accept-Encoding: gzip, deflate 
Cookie: mochipass_session= 
Connection: keep-alive 
Proxy-Connection: keep-alive 

t_token=%3A1320923163%3A191098013553085002228331177770025958552%3AvcXtA5YwNT58Nt6uEGK-gvwpGqM%21&email=mytesingcomp&password=mytesingcomp&remember_me=on&login=Login&service=ads&host=www.mochimedia.com 

Ответ:

 
HTTP/1.1 302 Moved Temporarily 
Date: Thu, 10 Nov 2011 11:06:40 GMT 
Connection: close 
Set-Cookie: example_session=mytesingcomp&1320923200&H3rV7aMe&euqh6CL4I7x2PgtWcsJa-X0n_r4!; Version=1; Expires=Thu, 24-Nov-2011 11:06:40 GMT; Max-Age=1209600; Secure 
Server: Example/1.0 (Any of you quaids got a smint?) 
Location: https://www.example.com/login?email=mytesingcomp%40mail.ru&alias=mytesingcomp&status=verified&registered_service=ads&timestamp=1320923200&nonce=hmCFzV-9&hmac=EHNUJYf2dbVsg8Y-J7iEdzgHyT0%21&login=login 
Content-Length: 46 
X-Example-Server: 38.102.129.29:443 
P3P: policyref="http://www.example.com/p3p/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" 
X-Example-Backend: 10.0.0.107:40061 
X-Example-Source: 10.0.0.237:44200 

CONGRATULATIONS, you're logged in. Redirecting 

Теперь нам нужно сделать редирект, как сделать это с Curl?

+2

не ваш вопрос самообслуживающий? Используйте curl_setopt ($ handle, CURLOPT_FOLLOWLOCATION, true); – dmitry

+0

Нет, я не могу использовать CURLOPT_FOLLOWLOCATION, мне нужно эмулировать его. –

+1

Итак, прочитайте заголовок «Местоположение», если HTTP-код равен 30 раз, сделайте то, что вы хотите, и перейдите в это место вручную. – dmitry

ответ

0

хорошо, попробуйте использовать конструкцию по умолчанию, такие как:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

, если это не поможет, попробуйте разобрать Мануалы голову ответ, что-то вроде:

if (preg_match('/Location: (.+?)[\r\n]+/', $page, $m)) { 
    $location = $m[1]; 
    $page = curl_get($location); 
} 
+0

CURLOPT_FOLLOWLOCATION работает только на локальном сервере, но отключен на моем хостинге (проблема open_basedir). –

+0

ну, тогда не используйте FOLLOWLOCATION, попробуйте вручную разобрать ответ и вручную получите новую страницу – itspoma

-1

Проблемы решено! Мне нужно было добавить только две линии:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 

Надеюсь, это поможет кому угодно.

Смежные вопросы