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 

이제 우리는 리디렉션, 어떻게 컬을 만들 수 있도록해야합니까?

+2

질문에 대한 답변이 없습니까? curl_setopt ($ handle, CURLOPT_FOLLOWLOCATION, true)를 사용하십시오. – dmitry

+0

아니요, CURLOPT_FOLLOWLOCATION을 사용할 수 없습니다. 에뮬레이션해야합니다. –

+1

HTTP 코드가 30x이면 헤더를 읽으십시오. 원하는 것을 수행하고 수동으로 해당 위치로 이동하십시오. – 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'); 

희망이 있으면 누구에게나 도움이됩니다.