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);
}
?>
헤더값 아래에만 나오면 큰문제는 없는데 데이터 값에도 중간중간 같은 문자가 들어감니다.
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개
1ff8 바이트만큼 보내주고 또 숫자나오고 또 보내주고 하는거죠
안그런 서버도 있고요
15개정도 불러오면 이상이 없긴한데..ㅜㅜ
콘텐츠받을때 헤더다음 첫 값이 숫자인지 보고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;
}
이건가봅니다