php - 网页不打印winsock信息
问题描述
我正在尝试将数据从winsock
应用程序发送到 PHP 脚本。我已经尝试了各种标头类型,但都没有成功,而且我似乎找不到足够的信息。
数据已发送,但 PHP 脚本没有打印任何结果,所以我认为错误是标题类型。
C Winsock 代码
int main()
{
SOCKADDR_IN sock;
SOCKET s;
WSADATA wsa;
int lengthofrequest = 0;
char httprequest[180] =
"POST /test.php?name=alex&password=secret HTTP/1.1\r\n"
"Host: 127.0.0.1\r\n"
"Pragma: no-cache\r\n"
"Content-type: text/html\r\n"
"Connection: close\r\n"
"Content-Length: 25\r\n"
"\r\n";
lengthofrequest = strlen(httprequest);
// init winsock
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
return WSASYSNOTREADY;
sock.sin_addr.s_addr = inet_addr("127.0.0.1");
sock.sin_family = AF_INET;
sock.sin_port = htons(80);
// create socket
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
return 1;
// connect to the http panel
int conn = connect(s, (SOCKADDR*)&sock, sizeof(sock));
if (conn < 0)
return 1;
// send http header
send(s, httprequest, lengthofrequest, 0);
// close socket
closesocket(s);
WSACleanup();
return 0;
}
PHP 脚本
<?php
if(isset($_POST['name'], $_POST['password']))
{
echo $_POST['name'];
echo $_POST['password'];
}
?>
我将不胜感激任何帮助或指导。谢谢。
解决方案
您正在混合帖子并获取
使用 $_GET 访问您的数据,因为您的数据附加到 url
尝试这个:
<?php
if(isset($_GET['name'], $_GET['password']))
{
echo $_GET['name'];
echo $_GET['password'];
}
这应该可以,但是您应该考虑在 C 代码中将请求类型更改为 GET,以使您的代码清晰简单
你在这里做什么是模棱两可的:
"POST /test.php?name=alex&password=secret HTTP/1.1\r\n"
因为您正在使用 post 发送 get 参数,而 post 正文实际上是空的。
你也应该省略 ?>在你的 php 脚本的末尾。
推荐阅读
- c# - 根据置信度过滤单词
- angular - Angular Async Pipe 未正确更新
- r - 如何使数据框标签成为R中的列和拆分列?
- python - 如何使用循环为从 csv 导入的许多类似列创建名称相似的字符串?
- c - C:外部变量声明并包含守卫
- azure - 您如何以编程方式删除资源组中除特定资源之外的所有内容?
- javascript - Javascript 文件适用于一个 HTML 文件,但不适用于另一个
- python-3.x - 如何指定函数的函数的参数类型
- python - 根据命令行参数运行 pytest 标记
- android - 无法将 Android AAR(带有 JNI 绑定)与 Jitpack 上的源关联