xml 파싱 관련 문의 드려요 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

xml 파싱 관련 문의 드려요 정보

xml 파싱 관련 문의 드려요

본문

아래와 같이 중간에 "1ff8" 이라는 알수 없는 문자가 들어가네요..
헤더값 아래에만 나오면 큰문제는 없는데 데이터 값에도 중간중간 같은 문자가 들어감니다.

HTTP/1.1 200 OK
Date: Sun, 27 Mar 2011 07:50:17 GMT
Server: Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_jk/1.2.30
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml;charset=utf-8
 
1ff8
<?xml version="1.0" encoding="UTF-8"?>

소는는 아래와 같습니다.
<?
header("Content-Type: text/html; charset=UTF-8");

$key = "내키";
$url = "openapi.naver.com";
$url_naver = "search?key=$key&query=daiwa&display=55&start=1";

$kin_url = $url_naver."&target=shop&sort=sim";
$fp = fsockopen($url, 80, $errno, $errstr, 500);
 if(!$fp){
  echo "$errstr ($errno)<br />\n";
 }else{
  $out = "GET /$kin_url HTTP/1.1\r\n";
  $out .= "Host: $url\r\n";
  $out .= "Content-Type: text/xml\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  while (!feof($fp)) {
    $kin_data .= fgets($fp, 100);
 
  }
  fclose($fp);
 }

?>
  • 복사

댓글 전체

저 부분  예외처리하고 받아오세요
콘텐츠받을때 헤더다음 첫 값이 숫자인지 보고16진수 hexdec
 그 바이트만큼 받거나 전송바이트 체크 안하는 서버로 인식하고요
체크 안하는 놈이면 막 전송해서 오고
한다면 현재까지 받은 바이트수 계산하면서 또 받고요
뒤늦게 답변 달아드립니다
  while (!feof($fp)) {
    $kin_data .= fgets($fp, 100);
  }
저도 그냥 socket 으로 받아오는 library 만들어서 쓰고 있는데요

            $first = TRUE;
            $use_linenum = TRUE; // HTML body length
            while(!feof($fp) && $line !== FALSE) {
                if($use_linenum && $get_len >= $nlength)
                {
                    $hex = $nlength = fgets($fp);
                    if($hex === FALSE)
                        break;

                    if($first && $hex == "\r\n")
                    {
                        $use_linenum = FALSE;
                    }
                    $nlength = hexdec(trim($nlength));
                    $get_len = 0;
                }

                $line = fgets($fp);
                if($line === FALSE)
                    break;
                $get_len += strlen($line);
                if($use_linenum && $get_len >= $nlength)
                {
                    $line = str_replace("\r\n","",$line);
                }
                $result .= $line;
            }
© SIRSOFT
현재 페이지 제일 처음으로