сокеты — C ++ WebRequest Response

Я пишу программу, которая создает WebRequest для URL в C ++. Это мой код:

void CreateRequest()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
return;
}
SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct hostent *host;
host = gethostbyname("www.website.net");
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(80);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){
return;
}
const char link[] = "www.website.net";

char Link[100] = "";
strcat(Link, "GET /File.php?Test=");
strcat(Link, "test");
strcat(Link, " HTTP/1.1\r\nHost: www.website.net \r\nConnection: close\r\n\r\n");send(Socket, Link, strlen(Link), 0);

char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0){
int i = 0;
while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
cout << buffer[i];
i += 1;
}
}
closesocket(Socket);
WSACleanup();
}

Это результат:

введите описание изображения здесь

То, что я хочу сделать, это просто получить «Доступ запрещен», чтобы я мог проверить состояние запроса из моего кода.

1

Решение

strcat(Link, " HTTP/1.1\r\nHost: www.website.net \r\nConnection: close\r\n\r\n")

У вас есть дополнительный пробел между именем хоста и \ r \ n. Попробуйте удалить это, чтобы это выглядело так:

strcat(Link, " HTTP/1.1\r\nHost: www.website.net\r\nConnection: close\r\n\r\n")

Редактировать:

Также вполне возможно, что все на уровне HTTP работает нормально, но файл PHP на сервере генерирует сообщение «Отказано в доступе». У вас есть контроль над файлом PHP?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]