2016-09-21 1 views
1

PHP로 작성한 curl을 사용하여 xml 요청을 보내면 로그인이 작동하는 것 같습니다. 로그인 세부 사항에 잘못된 것이 있으면 오류를 표시하기 때문입니다.제 경우에는 컬 결과를 디코딩해야합니까?

소스의 주요 코드 :

$contentlength=strlen($postdata); 

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_URL =>$this->url , 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0, 
    CURLOPT_CUSTOMREQUEST => "POST", 
    CURLOPT_POSTFIELDS => "$postdata", 
    CURLOPT_HTTPHEADER => array(
     "Content-Type: text/xml;charset=utf-8",   
     "Content-Length: 839", 
     "Accept: text/xml", 
     "Accept-Encoding: gzip", 
     "Authorization : $Authorization", 
     "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11", 
     "Host: $host", 
     "Connection: close" 

    ), 
)); 

OUPUT은 다음과 같습니다

‹d1oÂ0…÷üŠS–,Û)J›ÈuèÔ"$–²šäH£Æv°MUþ}MÒ€J·»{ŸŸï_}«¾ÐºÖèeÂæ4Ô•©[Ý,““?¤OÉJDÜ¢ëv¸ïLõyåã‡yþ‹ Ç:oñ€6 x 

잘못된 것입니다 모든 것을 확인하는 경우 그러나 그것은 어떤 쓰레기 값에 응답을 제공? 내가 해독해야 하나? 만약 그렇다면 forgat 내가 디버그해야합니다. xml 요청을 보내려면 securetrading.com 사이트를 사용하십시오.

+0

은 'CURLOPT_ENCODING'에 대해 다른 컬 옵션을 설정했습니다. –

답변

1

간단히, 당신은 CURLOPT_HTTPHEADER 배열에서 "Accept-Encoding: gzip"를 제거해야 제대로 결과를 보여줍니다. 여전히 작동하지 않는 경우

, 당신은 당신이 이미 계산 $contentlength 변수에 저장 한 후 데이터의 문자열 길이를 계산해야 할 내용 길이의 해결 문제에 대한 gzdecode() 기능

$original_output= gzdecode($curl_output); 

를 사용하여 출력을 압축을 사용합니다.

"Content-Length:".$contentlength 
+0

이제 해결되었습니다. 그러나 주어진 문서에서 그것은 다음과 같이 쓰여집니다 : XML을 인코딩하기 전에 Content-Length 헤더를 계산할 때 이런 종류의 오류가 발생할 수 있습니다. Content-Length 헤더는 요청의 실제 페이로드의 바이트 수를 포함해야하므로 문자 인코딩이 수행 된 후에 계산되어야합니다. – user3264863

+0

나는 그것을 이해하지 못한다. 내 기본 코드보다 위의 예를 들어 주시겠습니까? – user3264863

+0

헤더 옵션을 제거하는 첫 번째 옵션을 사용 하시겠습니까? 또는 php 함수에 의한 두 번째 옵션? –

0
curl_setopt($curl, CURLOPT_ENCODING , "gzip");