gethostbyname() 함수 사용시

inyonge의 이미지

안녕하세요, 리눅스에서 naverapi(openapi)를 사용해서 단어의 뜻을 찾아주는 프로그램을 짜려고 합니다.

네이버 api로 단어를 찾는 방법은 일단,

http://openapi.naver.com/search?key=인증키&query=찾는단어&display=5&start=1&target=endic

url을 브라우저에 입력하면, xml 메시지가 보여집니다.

그리고, 그 단어의 뜻이 실린 웹페이지의 주소가 xml 메시지 안에 주소 식으로 되어 있고,

웹 브라우저에 링크 태그 속의 주소를 입력하면 뜻 페이지가 나오게 됩니다.

(즉, 사전찾기 기능의 네이버 api는 뜻을 담은 웹페이지의 주소를 담은 xml메시지를 전송해 줍니다.)
/
/
/
저는 gethosybyname()에 위의 url을 인자로 넣어서 ip 주소를 얻어낸 다음에

그 ip주소로 connect()해서 xml 메시지를 받고, 그 안에서 link태그 속의 주소를 뽑아내서 다시 단어의 뜻이 실린 웹페이지
ex) http://endic.naver.com/endic.naver?docid=492100

에 엑세스하여 뜻을 뽑아오려고 생각하고 있었습니다.
/
/
/

그런데, gethostbyname() 안에 저 위의

http://openapi.naver.com/search?key=인증키&query=찾는단어&display=5&start=1&target=endic

와 같은 주소 형식을 넣으니까 프로그램이 IP를 못 얻어오더라구요.

인자를 전해주는 ? 뒤의 변수들을 인식을 못하는 것 같은데요.

따로 인자를 전해주는 방법이 있나요?

리눅스에서 보통 c를 사용해서 위와 같은 url 을 엑세스 할 수 있는 방법이 있나요?
/
/
/

^^ 질문이 참 어지럽네요.

그럼 더운 여름 건강 조심하세요.

세이군의 이미지

gethostbyname('endic.naver.com');

이와 같이 사용합니다.
URL을 파싱해서 호스트명(endic.naver.com, openapi.naver.com)을 가져온 다음에 gethostbyname를 쓰던가 그렇지 않으면 코드상에 박아두고 사용하세요. "URL 전체를 인수로 넘겨주면 호스트를 찾을 수 없습니다." 오류메시지를 만납니다.
inyonge의 이미지

답변 감사합니다.^^

근데 또 의문이 들어서요.

위의 URL을 보면 인증키와 검색할 단어( KEY, WORD )를 인자로 전달하게 되어 있는데,

이 인자는 어떤 식으로 전달해야 할까요?

gethostbyname( 'endic.naver.com ' );

이것은 영어 사전 서비스를 제공하는 주소를 가져오긴 하지만 뜻을 찾아주는 것은 아니잖아요.

^^ 답변 부탁드립니다.

더운 여름 건강하세요.

세이군의 이미지

C에서의 소켓 프로그래밍은 해본적이 없어서 가상코드(수도코드)로만 설명해드리겠습니다.

1. ipaddr = gethostbyname('openapi.naver.com');
2. 소켓구조체 준비 - ipaddr하고 포트번호가 입력됨(이 예에서는 80)
3. socket connect
4. HTTP 쿼리문자열 만들기
querystring = "GET /search?key=인증키&query=찾는단어&display=5&start=1&target=endic HTTP/1.1\r\nHost: openapi.naver.com\r\nConnection: close\r\n\r\n";
이 때 "찾는단어" 이 부분은 URL encode방식의 문자열을 입력합니다. 인증키 부분은 하드코딩(코드에 직접 적어두는 방식 - 변경이 되는 경우 재컴파일해야함)해줘도 되겠고요.
5. socketwrite(3번의 반환값, querystring);
6. 응답을 받음
7. XML 파싱을 통해 해당 주소 구함

이런 단계로 프로그래밍을 해 주셔야 합니다. 가상코드라서 실제 소켓함수명하고는 다르기 때문에 소켓프로그래밍 관련 내용을 찾아보시기 바랍니다.

inyonge의 이미지

아직 시도해 본 것은 아니지만요,

이해가 가네요. 시도해보겠습니다.

더운 여름 건강 조심하세요^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.