Http GET请求使用C ++提交表单

时间:2015-01-30 20:53:54

标签: c++ forms http get

我写了一个C ++程序,它向给定的主机发送一个http GET请求并接收答案。我的程序不支持POST请求。我知道表单参数可以附加在路径的末尾,如下所示:

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

我在该网站的页面源中查找了键和值。当我单击网站上的相应按钮提交表单时,它使用POST请求,这与前一个使用GET请求的示例不同。使用正常的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请求的情况下以某种方式在第二个网站上提交表单参数吗?有些网站只接受/支持POST请求中的表单参数,而不接受GET请求吗?

1 个答案:

答案 0 :(得分: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,但是在这种情况下没有任何改变,我们只是在读取数据。不幸的是,这种类型的东西在Web开发人员中非常普遍,人们对HTTP协议缺乏基本的了解并且一直使用它的方法不正确。