[英]C++ WinSock Get Data From PHP Page?
您好,我对使用sockets
还很陌生,并且对它们还不那么熟悉,基本上我想要做的就是将string variable
传递给web address
(例如, www.example.com/index.php?Example=StringExample
)然后得到响应,因此例如,如果index.php
看起来像这样,它将返回"Test Example"
:
<?php
if($_GET['Example'] == "StringExample")
{
echo "Test Example";
}
?>
这是我在c ++中尝试过的方法:
struct sockaddr_in SocketAddress;
hostent* addr = gethostbyname("www.example.com/index.php?Example=StringExample");
int sizeofaddr = sizeof(addr);
SocketAddress.sin_addr.s_addr = inet_addr(addr->h_name);
SocketAddress.sin_port = htons(80);
SocketAddress.sin_family = AF_INET;
SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);
if (connect(Connection, (SOCKADDR*)&addr, sizeofaddr) != 0)
{
return 0; //Failed to Connect
}
char buffff[256];
recv(Connection, buffff, sizeof(buffff), NULL);
//"Test Example" now stored in buffff
我究竟做错了什么?
顺便说一句,在我的情况下,我不想使用诸如boost
类的任何libraries
。 谢谢您的帮助 :)
gethostbyname("www.example.com/index.php?Example=StringExample");
“ www.example.com/index.php?Example=StringExample”不是有效的服务器名称。 这是一个完整的URL; 服务器名称为“ www.example.com”。 gethostbyname()
采用服务器名称(而不是URL),并返回其IP地址。 此外, gethostbyname()
已被淘汰。 新代码应改为使用getaddrinfo(3)函数。
显然,这是一个HTTP
URL。 要通过HTTP下载文档,不仅要连接套接字,还要做很多工作。 建立套接字连接只是从HTTP服务器下载文档的第一步。 这之后必须发送有效的HTTP请求,然后从服务器接收HTTP响应。
有很多库,例如curl ,可以实现下载HTTP文档所需的整个客户端过程,这些过程将自己处理套接字连接。
但是,尝试自己实现也没有错。 这是一个很好的编程专家。
因此,在解析www.example.com
的IP地址之后,您需要
1)连接到服务器的端口80(默认的HTTP端口)。
2)发送HTTP请求“ /index.php?Example=StringExample”。
3)解析HTTP响应。
HTTP请求和响应的规范由RFC 2616定义,您可以查阅该规范以获取有关HTTP请求和响应的结构的完整文档。
如果要使用套接字访问Web服务器,则必须记住:
以您的示例为例:
hostent* addr = gethostbyname("www.example.com");
//...
const char* request = "GET index.html"
send(Connection, request, strlen(request), NULL)
//fetch index.html with a recv and parse it
更准确地说,如果要访问服务器,则必须看看如何在http协议中实现GET,PUT,POST等,将适当的命令发送到Web服务器并recv()答复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.