Я пытаюсь отправить данные из приложения 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'];
}
это должно работать, но вы должны подумать о том, чтобы изменить свой тип запроса на GET в коде C, а также сделать ваш код понятным и простым
То, что вы делаете здесь, неоднозначно:
"POST /test.php?name=alex&password=secret HTTP/1.1\r\n"
Потому что вы отправляете параметры, используя пост, и тело сообщения фактически пустое.
Также вы должны опустить ?> В конце вашего php-скрипта.
char httprequest[180] =
"GET /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);
все еще не работает с GET, буфер отправки составляет 151 байт, его довольно странно, проблема должна быть в формате заголовков http, я удалил?> как вы сказали, и то же самое, что и раньше