2011-07-26 5 views
0

curl과 PHP를 사용하여 POST 요청을 만들고 사용자 이름/비밀번호 배열을 JSON 객체로 보냅니다.CURLOPT_HEADER 헤더를 요청할 때 게시 데이터가 반환되지 않습니다. PHP CURL

지금까지 모든 것이 훌륭하게 진행되고 있습니다. 쿠키를 파싱 할 수 있도록 헤더를 읽으려고했습니다. 내가 파일/항아리를 사용할 수 있고 그것을 테스트했다는 것을 안다. 나는 디스크에 일을 쓰고 싶지 않습니다.

그래서 CURLOPT_HEADER 플래그를 TRUE로 설정하면 쿠키 값을 구문 분석 할 수 있습니다.

HOWEVER - 반환 된 데이터가 사라졌습니다. 완전히 사라졌습니다 ... 내가 플래그 _HEADER FALSE - 응답을 참조하십시오.

코드 :

$login_array = array('login' => array('username' => $username, 'password' => $password)); 
    $login_json = json_encode($login_array); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); <-- this line f***s it all up... 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $login_json); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); 
    curl_setopt($ch, CURLOPT_URL, 'http://localhost/test/token'); 

    $result = curl_exec($ch); 

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    if ($http_code != 200) { /* do something */ } 

    preg_match_all('|Set-Cookie: (.*);|U', $result, $content);  
    $cookies = implode(';', $content[1]); 
    echo "cookie: $cookies<br>"; <-- thanks _HEADER for the cookie value 

    $response = json_decode($result); 
    $user_id = $response->user->id; 
    echo 'user_id: ' . $user_id . '<br>'; <-- empty man... headers are on means body is off... 

내가 다른 게시물을 통해 파고 봤는데가 OPTS의 순서가 차이가 보인다. 그 (것)들을 이동하는 시도 - 운 없음.

생각?!

답변

2

사용 :

$body=mb_substr($result, curl_getinfo($ch,CURLINFO_HEADER_SIZE)); 
$response = json_decode($body); 
$user_id = $response->user->id; 
echo 'user_id: ' . $user_id . '<br>'; 
+0

이 트릭을하고있는 것으로 보인다 시도 - curl_getinfo하는 curl_get_info을 수정하시기 바랍니다 불구하고. 그래서 여기서 무슨 일이 일어나고있는거야? 당신이 정교 할 수 있니? 감사. –

+0

"CURLOPT_HEADER, TRUE"때문에 $ result하지만 $ result = "페이지의 본문"+ "본문"에 json_encode를 사용 했으므로 응답 페이지의 본문을 추출하고 json_encode를 적용해야합니다. – Darm

+0

. 이 스레드를 따르는 사람은 누구나 헤더를 요청하면 본문과 함께 포장됩니다. –

0

은 (거짓 $의 채널, CURLOPT_NOBODY)이

curl_setopt

+0

내 게시물에 언급하는 것을 잊어 버렸습니다. 나는 이것을 시도했지만 작동하지 않았습니다 ... –

관련 문제