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);
}
?>
헤더값 아래에만 나오면 큰문제는 없는데 데이터 값에도 중간중간 같은 문자가 들어감니다.
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);
}
?>
댓글 전체
소켓으로 받으시명 서버에 따라서 context 길이를 먼저 보내고 보내서 그렇습니다
헤더 끝나고 본문 나오는 부분부터
1ff8 바이트만큼 보내주고 또 숫자나오고 또 보내주고 하는거죠
안그런 서버도 있고요
1ff8 바이트만큼 보내주고 또 숫자나오고 또 보내주고 하는거죠
안그런 서버도 있고요
그냥 file get contents 해서 내용받아쓰시면 좋을것같아요
off 되어있어서요..cafe24 ㅜㅜ
file ge contents 나 위 방법 말고 다른방법은 없을까요?
15개정도 불러오면 이상이 없긴한데..ㅜㅜ
15개정도 불러오면 이상이 없긴한데..ㅜㅜ
저 부분 예외처리하고 받아오세요
콘텐츠받을때 헤더다음 첫 값이 숫자인지 보고16진수 hexdec
그 바이트만큼 받거나 전송바이트 체크 안하는 서버로 인식하고요
체크 안하는 놈이면 막 전송해서 오고
한다면 현재까지 받은 바이트수 계산하면서 또 받고요
콘텐츠받을때 헤더다음 첫 값이 숫자인지 보고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;
}
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;
}