Я пишу программу, которая создает 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();
}
Это результат:
То, что я хочу сделать, это просто получить «Доступ запрещен», чтобы я мог проверить состояние запроса из моего кода.
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?
Других решений пока нет …