Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Чтобы спарсить ссылку с помощью сокетов на C++, вам необходимо выполнить следующие шаги:
Установить соединение с веб-сервером, где расположена страница с нужной ссылкой, используя функцию socket(), connect(), и inet_addr().
Отправить HTTP-запрос на сервер с помощью функции send().
Прочитать ответ от сервера, который будет содержать HTML-код страницы с помощью функции recv().
Проаналировать HTML-код и найдите нужную ссылку. Это можно сделать с помощью библиотек для работы с HTML, таких как libxml2 или libcurl, или же реализовав свой парсер.
И извлекаем URL-адрес из найденного тега ссылки и сохраняем его в переменной. Всё
Пример кода по этим шагам:
C++:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define MAX_BUFFER_SIZE 1024
using namespace std;
int main() {
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
cerr << "Error: Failed to create socket" << endl;
return 1;
}
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(80);
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(client_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
cerr << "Error: Failed to connect to server" << endl;
return 1;
}
string request = "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
if (send(client_socket, request.c_str(), request.length(), 0) < 0) {
cerr << "Error: Failed to send request to server" << endl;
return 1;
}
char buffer[MAX_BUFFER_SIZE] = {0};
string response;
while (true) {
int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
if (bytes_received < 0) {
cerr << "Error: Failed to receive data from server" << endl;
return 1;
} else if (bytes_received == 0) {
break;
} else {
response.append(buffer, bytes_received);
}
}
size_t start_pos = response.find("<a href=\"");
if (start_pos != string::npos) {
start_pos += strlen("<a href=\"");
size_t end_pos = response.find("\"", start_pos);
if (end_pos != string::npos) {
string link = response.substr(start_pos, end_pos - start_pos);
cout << "Link found: " << link << endl;
}
}
close(client_socket);
return 0;
}
Или можно использовать библиотеку сокетов, такую как socket.h или Winsock.h (для Windows).
Пример кода который устанавливает соединение с сервером, отправляет запрос и получает ответ:
Этот код устанавливает соединение с HTTP сервером, отправляет запрос и получает ответ. Затем он ищет первую ссылку в HTML-коде ответа и выводит ее на экран.
Это только простой пример, и для реальной работы с сокетами тебе, возможно, потребуется реализовать более сложный код для работы с различными типами запросов и ответов.
Чтобы спарсить ссылку с помощью сокетов на C++, вам необходимо выполнить следующие шаги:
Установите соединение с веб-сервером, на котором расположена страница с нужной ссылкой, используя функцию socket(), connect(), и inet_addr().
Отправьте HTTP-запрос на сервер с помощью функции send().
Прочитайте ответ от сервера, который будет содержать HTML-код страницы с помощью функции recv().
Проанализируйте HTML-код и найдите нужную ссылку. Это можно сделать с помощью библиотек для работы с HTML, таких как libxml2 или libcurl, или же реализовав свой парсер.
Извлеките URL-адрес из найденного тега ссылки и сохраните его в переменной.
Пример кода по этим шагам:
C++:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define MAX_BUFFER_SIZE 1024
using namespace std;
int main() {
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
cerr << "Error: Failed to create socket" << endl;
return 1;
}
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(80);
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(client_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
cerr << "Error: Failed to connect to server" << endl;
return 1;
}
string request = "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
if (send(client_socket, request.c_str(), request.length(), 0) < 0) {
cerr << "Error: Failed to send request to server" << endl;
return 1;
}
char buffer[MAX_BUFFER_SIZE] = {0};
string response;
while (true) {
int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
if (bytes_received < 0) {
cerr << "Error: Failed to receive data from server" << endl;
return 1;
} else if (bytes_received == 0) {
break;
} else {
response.append(buffer, bytes_received);
}
}
size_t start_pos = response.find("<a href=\"");
if (start_pos != string::npos) {
start_pos += strlen("<a href=\"");
size_t end_pos = response.find("\"", start_pos);
if (end_pos != string::npos) {
string link = response.substr(start_pos, end_pos - start_pos);
cout << "Link found: " << link << endl;
}
}
close(client_socket);
return 0;
}
Или можно использовать библиотеку сокетов, такую как socket.h или Winsock.h (для Windows).
Пример кода который устанавливает соединение с сервером, отправляет запрос и получает ответ:
Этот код устанавливает соединение с HTTP сервером, отправляет запрос и получает ответ. Затем он ищет первую ссылку в HTML-коде ответа и выводит ее на экран.
Это только простой пример, и для реальной работы с сокетами тебе, возможно, потребуется реализовать более сложный код для работы с различными типами запросов и ответов.