테스트 사이트 - 개발 중인 베타 버전입니다

xml 파싱 관련 문의 드려요

· 14년 전 · 5009 · 10
아래와 같이 중간에 "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);
}

?>

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 10개

소켓으로 받으시명 서버에 따라서 context 길이를 먼저 보내고 보내서 그렇습니다
헤더 끝나고 본문 나오는 부분부터
1ff8 바이트만큼 보내주고 또 숫자나오고 또 보내주고 하는거죠
안그런 서버도 있고요
그냥 file get contents 해서 내용받아쓰시면 좋을것같아요
off 되어있어서요..cafe24 ㅜㅜ
file ge contents 나 위 방법 말고 다른방법은 없을까요?
15개정도 불러오면 이상이 없긴한데..ㅜㅜ
저 부분 예외처리하고 받아오세요
콘텐츠받을때 헤더다음 첫 값이 숫자인지 보고16진수 hexdec
그 바이트만큼 받거나 전송바이트 체크 안하는 서버로 인식하고요
체크 안하는 놈이면 막 전송해서 오고
한다면 현재까지 받은 바이트수 계산하면서 또 받고요
예외 처리 함수나 방법을 알고 계시면 알려주실수 없나요?
참고 사이트나 자료라도 부탁드려요
http://www.criticaldevelopment.net/xml/doc.php
요걸로 해결했네요..몽구스님 신경써주셔서 감사합니다.
뒤늦게 답변 달아드립니다
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;
}
http://no1power.tistory.com/55
이건가봅니다

게시글 목록

번호 제목
284255
284248
284247
284246
284242
284238
284234
284233
284229
284224
284222
284215
284213
284212
284209
284208
284201
284193
284192
284174