[질문] WEB 사이트에 POST 방식으로 DATA를 넘기고 그 결과를 받

haewoo의 이미지

개발은 C/C++로 하고 있습니다.

문제는 외국의 특정 웹사이트(Looking Glass 서비스 제공 사이트)에 Form의 내용은
제가 임의의 값으로 채워서 넘겨주고 그 결과를 받는 프로그램을 작성해야 합니다.

네트웍 연결은 telnet CGI를 이용해서 80 Port로 접속을 하는 것까지는 하겠는데..
이후에 POST 형식의 DATA 값을 3개 넘겨주고 그 결과를 받아야 하는데. 어떻게 해야하는지
도저히 감을 잡지 못하겠습니다.

이곳에서도 검색을 해봤는데.. GET으로 DATA를 가져오는 것은 설명이 되어 있던데..
POST 방식으로 DATA를 넘겨주고 그 결과를 받아오는 CGI에 대한 설명은 없더군요.

제가 개발 시간에 쫒기고 있는 관계로 공부를 할 시간이 그리 많지 않아 이렇게 부탁드리게 되었습니다.

고수님들의 많은 도움 바라겠습니다.

fliers의 이미지

POST /cgi HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary=바운더리
Accept-Encoding: gzip, deflate
Host: 호스트:포트
Content-Length: 전체 길이

--바운더리
Content-Disposition: form-data; name=폼name; filename=파일명
Content-Type: application/octet-stream

파일내용.................................
.................................
.................................
--바운더리--

바운더리로 여러개의 폼을 전송할 수 있고요, 파일내용과는 겹치진 않아야 하겠죠.
content-length는 http헤더 아래에 전송도되는 모든 길이를 나타냅니다.

browser가 전송하는 데이터를 가로채보면 보다 자세히 아실 수 있을 겁니다.

haewoo의 이미지

http://neptune.dti.ad.jp/cgi-bin/lg.pl 에 POST 방식으로 다음의 3개 값을 넘깁니다.

mode=ipv4&query=trace&addr=211.218.150.200

이렇게 넘길 경우의 예시를 좀 들어주시면 감사하겠습니다.

제가 너무 급해서.. 죄송..

참... 브라우저의 전송 데이터는 어떻게 가로챌수 있나요??

ajoupark의 이미지

webserver 에 socket 열고 헤더 만들고 그뒤에 data 붙여서 쏘세요.
대략 헤더 만드는 것은 이정도....
자세한 내용은 http header 를 더 분석을 해보시지요.

void create_HTTP_request()
{
	char req_temp[256] = "";

	strcpy( req_temp, "POST ");
	strcat( req_temp, rhost->cgipath);
	strcat( req_temp, " HTTP/1.1");
	strcat( req_temp, "\n");
	strcat( req_temp, "Host: ");
	strcat( req_temp, rhost->hostname);
	strcat( req_temp, "\n");
	strcat( req_temp, "Content-type: multipart/form-data; ");
	strcat( req_temp, "boundary=AaB03x");
	strcat( req_temp, "\n");
	strcat( req_temp, "Content-length: ");

	memset( HTTPHEADER, '\0', HEADER_SIZE);
	sprintf( HTTPHEADER, "%s %u\n\n", req_temp, cur_seg_info->fsize + FILE_NAME_SIZE+ sizeof(ETCINFO));
	
#ifdef DEBUG
	printf("HTTPHEADER :[%s]", HTTPHEADER);
#endif
	pdata->data = (char*)malloc(cur_seg_info->fsize + strlen(HTTPHEADER)+ FILE_NAME_SIZE+ sizeof(ETCINFO) );
	if( pdata->data == NULL )
	{
		ERR_LOG("malloc failed");
		exit(-1);
	}


/** 주워 들은 것도 내 것이다. 많이 주워 들어야지*/

최병현의 이미지

---- 코드 인용 -- 삭제함...

처음에 코드를 잘 못 읽었습니다. :wink:

---- 코드 인용 -- 삭제함...

실제로 구현하실 때는 RFC를 참고하시는 것이 좋을 것 같습니다.
저도 비슷한 일을 한 적이 있습니다만, RFC에 모든 것이 설명되어 있습니다.
양이 많아서 처음에는 부담스럽지만, 필요한 부분만 찾아서 읽어도 원하는 만큼 구현할 수 있습니다.

HTTP 1.0 관련 http://www.ietf.org/rfc/rfc1945.txt?number=1945
HTTP 1.1 관련 http://www.ietf.org/rfc/rfc2068.txt?number=2068

To be a rich

fliers의 이미지

제가 질문을 잘못 봤군요. 파일을 보내는 줄 알고..

Quote:
http://neptune.dti.ad.jp/cgi-bin/lg.pl 에 POST 방식으로 다음의 3개 값을 넘깁니다.

mode=ipv4&query=trace&addr=211.218.150.200

POST /cgi-bin/lg.pl HTTP/1.1
Accept: */*
Host: neptune.dti.ad.jp
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
Connection: close

mode=ipv4&query=trace&addr=211.218.150.200

를 보내주면 됩니다.

haewoo의 이미지

관심있게 보아주신 모든 분들께 감사를 드리며..

특히 답변주신 분들께는 더욱 감사를 드립니다.

댓글 달기

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