2015-01-30 3 views
1

주어진 호스트에 http GET 요청을 보내고 응답을받는 C++ 프로그램을 작성했습니다. 내 프로그램이 POST 요청을 지원하지 않습니다. 그 형태 파라미터과 같이 경로의 끝 부분에 추가 할 수 있습니다 알고HTTP GET 요청을 C++을 사용하여 제출 요청

Normal link: http://finance.yahoo.com/q/hp 
Link with form parameters: http://finance.yahoo.com/q/hp?s=SNIVX&b=1&a=00&c=1900 

두 번째 링크 요청에 대한 답변을 받기까지 잘 작동합니다. 나는이 웹 사이트에 같은 시도했지만 양식 매개 변수를 허용하지 않는 것 : 그 웹 사이트의 페이지 소스에 키와 값을 보였다

http://www.finanzen.net/historische-kurse/Linde?inTag1=1&inMonat1=1&inJahr1=2010&inTag2=30&inMonat2=1&inJahr2=2015&strBoerse=XETRA 

. 양식을 제출하기 위해 웹 사이트에서 해당 버튼을 클릭하면 GET 요청을 사용하는 이전 예제와 달리 POST 요청을 사용합니다. 정상적인 GET 요청을하면 폼 매개 변수가 제공되지 않은 것처럼 페이지가 반환됩니다.

클라이언트 - 서버 통신에 http 1.0 및 winsock을 사용하고 있습니다. 내 요청은 다음과 같이 구성됩니다.

sprintf(htmlRequest, "GET %s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n", file.c_str(), host.c_str()); 

POST 요청을 사용하지 않고도 두 번째 웹 사이트에서 양식 매개 변수를 제출할 수 있습니까? 일부 웹 사이트에서만 GET 요청이 아닌 POST 요청의 양식 매개 변수를 승인/지원합니까?

+0

이 도움이 될 수 있습니다. http://stackoverflow.com/questions/1011339/how-do-you-make-a-http-request-with-c – serdarylds

답변

0

POST 메서드를 통해 리소스에 액세스해야하는 경우 쿼리 문자열이 아닌 HTTP 요청 본문에 매개 변수를 전달해야합니다.

요청은 다음과 같아야합니다

GET /historische-kurse/Linde HTTP/1.0\r\n 
Host: www.finanzen.net\r\n 
Connection: close\r\n 
\r\n 
inTag1=1&inMonat1=1&inJahr1=2010&inTag2=30&inMonat2=1&inJahr2=2015&strBoerse=XETRA 

Read more about the structure of a HTTP request합니다.

Read more about the POST method.

P.S. : 참고로 두 번째 페이지의 저자는 POST 방법을 악용합니다. POST가 요청이 자원 상태의 변경을 야기 할 수있을 때 POST가 사용되는 것으로 가정되지만이 상황에서는 아무 것도 변경되지 않고 데이터를 읽는 것뿐입니다. 불행히도 이러한 유형의 문제는 웹 개발자들 사이에서 매우 흔한 일이며 사람들은 HTTP 프로토콜에 대한 기본적인 이해가 부족하고 항상 그 방법을 잘못 사용합니다.

+0

내가 게시 한 http 요청을 보내려고했지만 결과가 양식 매개 변수가없는 응답과 동일한 응답. 나는 GET과 POST를 사용했고, Content-Length와 Content-Type과 firefox에서 버튼을 클릭 할 때 캡처 한 HTTP 요청에 사용되는 다른 필드를 추가했지만 지금까지는 성공하지 못했습니다. 페이지에서 사용하는 쿠키에 문제가있을 수 있습니까? 나는 쿠키가 어떻게 작동하는지 모르겠다.하지만 클라이언트와 서버는 쿠키에 관한 데이터를 교환하고있다. –

+0

응답을 보내기 전에 서버가 쿠키를보고있을 수도 있습니다. 쿠키는'Cookie' HTTP 헤더를 사용하여 클라이언트로부터 전송됩니다. 서버는 클라이언트의 쿠키를'Set-Cookie' HTTP 헤더로 설정합니다. 귀하의 경우에는 다음과 같은 접근 방식이 효과가 있습니다 : 매개 변수없이 페이지를 '가져오고'서버의 응답을 구문 분석하고'Set-Cookie' 헤더의 값을 추출하십시오. 그런 다음 그것들을 사용하여'POST' 요청을 할 때'Cookie' 헤더의 값을 설정하십시오. 이것은 많은 작업이므로 libcurl과 같은 라이브러리를 사용하면 많은 도움이 될 것입니다. – nicebyte

+0

쿠키 작동 방식에 대한 자세한 내용은 공식 RFC 문서 (http://tools.ietf.org/html/rfc6265#section-5.2) 또는 위키 백과 문서 (http://en.wikipedia.org/wiki)를 참조하십시오./HTTP_cookie) – nicebyte

관련 문제