C++ Как по сокетам спарсить ссылку ?

Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
182
Реакции[?]
16
Поинты[?]
5K
привет всем, мне надо спарсить ссылку но по сокеты пример ссылки
Пожалуйста, авторизуйтесь для просмотра ссылки.

заранее спасибо за ответ
 
Пользователь
Статус
Оффлайн
Регистрация
22 Май 2022
Сообщения
203
Реакции[?]
43
Поинты[?]
6K
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2021
Сообщения
38
Реакции[?]
3
Поинты[?]
2K
привет всем, мне надо спарсить ссылку но по сокеты пример ссылки
Пожалуйста, авторизуйтесь для просмотра ссылки.

заранее спасибо за ответ
Чтобы спарсить ссылку с помощью сокетов на C++, вам необходимо выполнить следующие шаги:

  1. Установить соединение с веб-сервером, где расположена страница с нужной ссылкой, используя функцию socket(), connect(), и inet_addr().
  2. Отправить HTTP-запрос на сервер с помощью функции send().
  3. Прочитать ответ от сервера, который будет содержать HTML-код страницы с помощью функции recv().
  4. Проаналировать HTML-код и найдите нужную ссылку. Это можно сделать с помощью библиотек для работы с HTML, таких как libxml2 или libcurl, или же реализовав свой парсер.
  5. И извлекаем 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).

Пример кода который устанавливает соединение с сервером, отправляет запрос и получает ответ:
C++:
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

using namespace std;

int main() {
    // Создаем сокет
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        cout << "Ошибка создания сокета\n";
        return 1;
    }

    // Устанавливаем соединение
    sockaddr_in server;
    server.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP-адрес сервера
    server.sin_family = AF_INET;
    server.sin_port = htons(80); // Порт HTTP сервера

    if (connect(sock, (sockaddr*)&server, sizeof(server)) < 0) {
        cout << "Ошибка соединения\n";
        return 1;
    }

    // Отправляем запрос на сервер
    const char* message = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    if (send(sock, message, strlen(message), 0) < 0) {
        cout << "Ошибка отправки запроса\n";
        return 1;
    }

    // Получаем ответ от сервера
    char buffer[1024] = {0};
    if (recv(sock, buffer, sizeof(buffer), 0) < 0) {
        cout << "Ошибка получения ответа\n";
        return 1;
    }

    // Ищем ссылку в ответе
    const char* link_start = strstr(buffer, "<a href=\"");
    if (link_start) {
        link_start += strlen("<a href=\"");
        const char* link_end = strchr(link_start, '\"');
        if (link_end) {
            char link[256];
            strncpy(link, link_start, link_end - link_start);
            link[link_end - link_start] = '\0';
            cout << "Ссылка: " << link << endl;
        }
    }

    // Закрываем сокет
    close(sock);

    return 0;
}
Этот код устанавливает соединение с HTTP сервером, отправляет запрос и получает ответ. Затем он ищет первую ссылку в HTML-коде ответа и выводит ее на экран.

Это только простой пример, и для реальной работы с сокетами тебе, возможно, потребуется реализовать более сложный код для работы с различными типами запросов и ответов.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
182
Реакции[?]
16
Поинты[?]
5K
Чтобы спарсить ссылку с помощью сокетов на C++, вам необходимо выполнить следующие шаги:

  1. Установите соединение с веб-сервером, на котором расположена страница с нужной ссылкой, используя функцию socket(), connect(), и inet_addr().
  2. Отправьте HTTP-запрос на сервер с помощью функции send().
  3. Прочитайте ответ от сервера, который будет содержать HTML-код страницы с помощью функции recv().
  4. Проанализируйте HTML-код и найдите нужную ссылку. Это можно сделать с помощью библиотек для работы с HTML, таких как libxml2 или libcurl, или же реализовав свой парсер.
  5. Извлеките 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).

Пример кода который устанавливает соединение с сервером, отправляет запрос и получает ответ:
C++:
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

using namespace std;

int main() {
    // Создаем сокет
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        cout << "Ошибка создания сокета\n";
        return 1;
    }

    // Устанавливаем соединение
    sockaddr_in server;
    server.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP-адрес сервера
    server.sin_family = AF_INET;
    server.sin_port = htons(80); // Порт HTTP сервера

    if (connect(sock, (sockaddr*)&server, sizeof(server)) < 0) {
        cout << "Ошибка соединения\n";
        return 1;
    }

    // Отправляем запрос на сервер
    const char* message = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    if (send(sock, message, strlen(message), 0) < 0) {
        cout << "Ошибка отправки запроса\n";
        return 1;
    }

    // Получаем ответ от сервера
    char buffer[1024] = {0};
    if (recv(sock, buffer, sizeof(buffer), 0) < 0) {
        cout << "Ошибка получения ответа\n";
        return 1;
    }

    // Ищем ссылку в ответе
    const char* link_start = strstr(buffer, "<a href=\"");
    if (link_start) {
        link_start += strlen("<a href=\"");
        const char* link_end = strchr(link_start, '\"');
        if (link_end) {
            char link[256];
            strncpy(link, link_start, link_end - link_start);
            link[link_end - link_start] = '\0';
            cout << "Ссылка: " << link << endl;
        }
    }

    // Закрываем сокет
    close(sock);

    return 0;
}
Этот код устанавливает соединение с HTTP сервером, отправляет запрос и получает ответ. Затем он ищет первую ссылку в HTML-коде ответа и выводит ее на экран.

Это только простой пример, и для реальной работы с сокетами тебе, возможно, потребуется реализовать более сложный код для работы с различными типами запросов и ответов.
я хочу от тебя дитей
 
ЧВК YAROSLAV
Забаненный
Статус
Оффлайн
Регистрация
25 Дек 2019
Сообщения
594
Реакции[?]
183
Поинты[?]
31K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу