2014-12-21 8 views
0

브라우저 요청을 시뮬레이트하기 위해 phpQuery을 사용하고 있습니다. 코드는 다음과 같이 간단합니다.phpQuery로 브라우저 에뮬레이트 - URL 다시 쓰기가 경로를 수정했습니다.

require_once('phpQuery/phpQuery.php'); 
phpQuery::browserGet($url, 'success1'); 
function success1($browser) { 
    print $browser; 
} 

여기서 URL은 http://www.etk.cc/bmw/EN/parts/info/13547556118입니다. URL 재 작성이 http://www.etk.cc/bmw/EN/parts/info/Throttle housing Assy/13547556118/의 URL을 변경하지만 phpQuery 또는 젠드 라이브러리가 URL 재 작성을 인식하지 못하는 것으로 생각된다

Fatal error: Uncaught exception 'Zend_Uri_Exception' with message 'Path "/bmw/EN/parts/info/ http://www.etk.cc/bmw/EN/parts/info/Throttle housing Assy/13547556118/" is not a valid HTTP path'

:

그러나, 나는의 예외를 받았다.

이 문제를 어떻게 해결할 수 있습니까 (올바른 URL로드)?

참고 : URL에 제품 이름이 포함되어 있으므로 &에는 패턴이 없습니다. URL 재 작성 후에 URL을 사용할 수 없습니다.

+0

그것은 아마도 phpQuery 또는 브라우저 플러그인의 버그 - 당신은이 질문에 대한 답변을 확인 할 수 있습니다 : http://stackoverflow.com/questions/14481677/phpquery-webbrowser-plugin-using-cookies – Chris

+0

방법에 대한을 그냥 리다이렉트 URL을 사용하고 공간을 '% 20'으로 바꾸시겠습니까? – pguardiario

+0

@pguardiario 리디렉션 URL은 DB에서 동적으로 가져와 재 작성 URL로 반영합니다. – Raptor

답변

0

여기 내 해결책이 있습니다.

내가 먼저 요청의 헤더를 얻으려면 다음 코드를 사용하십시오 Location: 헤더에서

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
$out = curl_exec($ch); 

, 내가 다시 URL을 알 수 있습니다. 그런 다음 다시 얻은 재 작성 URL을 사용하여 필요한 정보를 얻으려면 phpQuery을 다시 사용합니다.

각주 : 질문의 예외는 phpQuery의 버그라고 생각합니다.

+0

그게 좋겠지 만, 컬이 전체 반응을 얻게하는 것은 아마도 의미가 있습니다. 그런 다음 원하는 (non-buggy) html 파서에이를로드 할 수 있습니다. – pguardiario

+0

전체 응답을 얻기 위해 cURL을 사용할 수 있었으면 좋겠지 만,'phpQuery' 또는'Snoopy' (또 다른 HTML 파서)를 사용하는 이유는 페이지가로드 된 후 페이지 내에 AJAX 로딩 된 일부 내용을 얻어야하기 때문입니다. cURL 호출은 이러한 정보를 얻을 수 없습니다 (AJAX 호출을 재실행하면 스크립트가 요청 원점을 확인하므로) – Raptor

+0

Curl은 phpQuery가 작성할 수있는 모든 요청을 확실히 작성할 수 있지만 왜 그렇게 할 수 없다고 생각하지는 않습니다. – pguardiario