用C++进行简单的HTTP请求

8
在您标记此内容为冗余之前,请了解我已经尝试过网络上发布的许多方法(包括堆栈溢出),但它们都无法满足我的需求。请注意,我对编程世界还很陌生,因此请原谅我对技术术语的误用。
目前,我正在编写一个C++程序,从用户的计算机中计算一些数据(例如IP地址),然后通过URL将IP地址发送到已设置好的服务器。例如,如果服务器位于http://stack1234abcdz.com,而用户的IP地址是100.100.100.100,则我将请求:
http://stack1234abcdz.com/?ip="100.100.100.100

我已经尝试过libcurl并且它在某种程度上有效,但是在编译后,我需要5个.dll文件与.exe文件放在同一个目录下才能运行,而由于我的问题的可移植性,我无法这样做。
我还尝试了一些传统的套接字方法,但它们需要大量的库和SDK,很难配置,对于像我这样的新手来说往往会感到不知所措。我需要做的事情非常简单(我甚至不需要服务器返回任何东西,除了可能是成功或失败代码),因此我认为我不应该需要那么多去完成这么少的事情。
我正在使用Windows 7(64位)机器上的Visual Studio 2006进行C++开发。我不能使用更新的版本,因为给我的其他代码大部分都是在VS2006中编写的,而且它们无法转换到更新的版本中。
我想现在我的问题是下一步该怎么办。有没有办法使带有libcurl的可执行文件不使用5个.dll文件?我看到有人说我必须做一些静态链接的东西,但他们没有具体说明。
或者是否有更简单的方法来解决我忽略的问题? WinInet? CAtlHttpClientT? Casablanca?我宁愿不安装和配置我还没有完全理解的复杂库,特别是对于像我这样的问题大小...
非常感谢您在这个问题上提供任何帮助/建议/反馈!

你尝试过这个吗:如何使用C++进行HTTP请求? - metacubed
1
是的,我已经查看了那个页面。不过,处理curlpp很麻烦,每次尝试时都会出现缺少头文件等错误。我还没有尝试其他API,主要是因为我已经筋疲力尽于处理配置(而且我的成功率通常相当低)。 - Sophia
为什么不使用posix套接字(winsock)打开到端口80的TCP连接,然后发送类似于GET /?ip="100.100.100.100 HTTP/1.0\r\n\r\n这样的内容?在C中打开套接字只需要10行代码。 - tofi9
1
这个怎么样?https://dev59.com/UmEh5IYBdhLWcg3wvVl3#22135885 它不完全相同,因为他想将其发送到一个不同的位置并使用不同的查询字符串,但应该很接近。 - Jerry Jeremiah
简直不敢相信我没有找到Jerry链接的那个问题/答案。至于套接字,我的上级说我不需要到达“套接字”级别,所以我没有费心,但我想我错了。现在我正在看两者。 - Sophia
显示剩余3条评论
1个回答

2

在经历了许多试错后,我解决了自己的问题。 我使用了CInternetSession类中的OpenURL()函数。 只用了约25行代码进行简单的打开。在包含afxinet.h、stdafx.h和httpClient.h时遇到了一些问题。这个顺序对我来说有效,但对其他程序可能不同。


如果您发布那25行代码,那将非常有帮助! - Zev Averbach
如果你能发布那25行代码,那将非常有帮助! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接