HTTP GET 명령을 통해 얻은 html 문서, 원문에 없던 ^M 문자가 붙음

cabjaewon의 이미지

웹에서 html 문서를 획득해 오는 프로그램을 만드는 중입니다.

unix 프롬프트에서 다음의 명령을 실행한 경우,

telnet www.hani.co.kr 80
GET /

얻게 되는 결과는 다음과 같습니다.

같은 결과를 이번에는 C 프로그램 내부에서 소켓 프로그래밍을 수행해 얻으려고 합니다.

"GET /\n" 이란 메세지를 www.hani.co.kr 의 웹 서버 (포트 80) 로 보내서 같은 작업을 수행했고, 아래의 html 파일을 얻었습니다.

질문1> 원문에 없던 ^M 이 C 프로그램을 이용해 얻은 결과엔 보이네요.. 왜 이 문자가 붙은 걸까요? 보아하니 new line 문자 자리에 들어온 것 같기도 하고... 원문과 같은 결과를 얻고 싶은데.. ^M 문자 없애는 방법 없을 까요?

질문2> 아울러, C 프로그램을 이용해 html 문서를 수집할 경우, html 문서의 일부만 수집되는 경우가 있습니다. 끝부분이 잘려나가든가 하는 식으루요.. 즉, 원문엔

File attachments: 
첨부파일 크기
Image icon code1.JPG55.59 KB
송효진의 이미지

1. dos 개행문자 \r\n 이 옛날 vi 에서 ^M 으로 나옵니다.
별로 없앨 필요가 없습니다. 영 흉하면 정규식 치환하면 되겠지요.

2. C 에서 사용하는 함수를 좋은걸로 바꿔보세요.
http 프로토콜은 톡톡 끊어지는 서버가 많습니다.

emerge money

wfellow의 이미지

20세기(?)까지 한겨레 신문사랑 많이 일했는뎅. 갑자기 저 화면을 보니 그때 한겨레 개발자들이랑 스타했던 기억에 안습 ㅠ.ㅜ 다들 잘 있으실라나? 흑흑흑,...

답변1> 위의 송효진님 말씀대로 [CR][LF]가 같이 온겁니다. conv 명령을 쓰던지 해서 없애심 되구여.
(글구 왠만하면 GET / HTTP/1.1[CR][LF] 이렇게 테스트하시져..)

답변2> 제가 보기엔 받으시는 분이 잘못 받으시는 것 같습니다. 제가 예전에 저 사이트 그런 작업 다 해 봤습니다...(ㅜ.ㅠ)

-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----

-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----

cabjaewon의 이미지

답변 감사드립니다..^^

그런데.. 받는 측에서 잘못 받고 있는 것 같다는 얘기가 어떤 말씀이신지 조금 더 구체적으로 듣고 싶습니다.. (위에 글에 내용 추가했으니까 참고해 주세요..)

그리고 제가 아직 초짜라서 그런데요.. 말씀하신 conv 명령이란 게요.. unix c 라이브러리에 없는 거 같던데.. 제가 직접 구현해야 하는 함수인거 맞지요? ('man conv' 를 프롬프트에 쳐봤는데.. 'No manual entry for conv' 라는 문구가 떠서요..)

한겨레 사이트를 택한 이유는.. 제가 평소에 자주 보는 신문이라 택했습니다...^^;;

kslee80의 이미지

www.hani.co.kr 에서 보내오는 index.html 이 [CR][LF] 를 newline 문자로 사용해서 작성되어 있는듯 싶네요.
(다른 사이트의 경우, 보내오는 index.html 에 [CR] 이 없기도 합니다; 서버 사이드 측 파일의 문제인듯)

그리고, telnet 으로 얻은 결과에서 [CR] 캐릭터가 없는 이유는 telnet 프로그램이 [CR][LF] 를 [LF] 로 변환하는 작업을 수행합니다;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.