Библиотека для работы с http

Написал небольшую библиотеку на ассемблере (MASM32) для работы с http-протоколом.

Реализованы следующие функции (stdcall):

1.SendPacket PROC \
http_ans_buffer :DWORD, \
http_ans_buffer_len :DWORD, \
http_host :DWORD, \
http_data :DWORD, \
http_service_uri :DWORD, \
http_cookies :DWORD, \
http_method :DWORD, \
http_referer :DWORD, \
http_add_headers :DWORD, \
http_proxy_ip :DWORD, \
http_proxy_port :DWORD, \
http_proxy_type :DWORD, \
http_proxy_user :DWORD, \
http_proxy_pass :DWORD, \
http_port :DWORD, \
http_answer_size :DWORD

Позволяет отправлять на сайты запрос и считывать ответ. Поддерживает прокси, сокс5, прокси и сокс5 с авторизацией.
http_ans_buffer - указатель на буфер, куда будет записан ответ сервера.
http_ans_buffer_len - длина этого буфера.
http_host - указатель на строку: хост, например, "ya.ru"
http_data - указатель на строку: данные для POST- или GET-запроса, например, "name=vasya&surname=pupkin"
http_service_uri - указатель на строку: service_uri, например, "/index.php". Могут быть 0, тогда используется значение по умолчанию "/"
http_cookies - указатель на строку: Cookies. Может быть 0.
http_method - метод - 0: GET или 1: POST
http_referer - указатель на строку: Http-Referer. Может быть 0.
http_add_headers - указатель на строку: дополнительные заголовки, после каждого заголовка должны идти символы перевода строки и возврата каретки (\r\n). Может быть 0.
http_proxy_ip - указатель на строку: IP-адрес прокси, может быть 0.
http_proxy_port - порт используемого прокси, должно быть 0, если прокси не используется
http_proxy_type - типа прокси: 0 - proxy, 1 - socks5.
http_proxy_user - указатель на строку: имя пользователя прокси, может быть 0
http_proxy_pass - указатель на строку: пароль прокси, может быть 0.
http_port - порт сайта, если 0, то используется порт 80.
http_answer_size - указатель на DWORD - сюда функция запишет размер принятого контента с заголовками. Может быть 0.

Возвращаемое значение:
0 - успех
1 - ошибка резолвинга доменного имени
2 - ошибка создания сокета
3 - ошибка подключения сокета
4 - ошибка выделения памяти
5 - ошибка отправки данных в сокет
6 - ошибка чтения из сокета
7 - недопустимый IP-адрес прокси-сервера
8 - ошибка отправки пакета авторизации socks5
9 - ошибка получения пакета авторизации socks5
10 - ошибка сокс5-сервера (недопустимый ответ)
11 - неверный логин или пароль socks5-сервера
14 - ошибка подключения к socks5-серверу
15 - socks5-сервер требует авторизацию, но логин и пароль не указаны

2.base64_encode PROC \
string_to_encode :DWORD, \
result_buffer :DWORD, \
result_buffer_length :DWORD, \
data_length :DWORD

Вычисляет base64 от блока данных.
string_to_encode - указатель на данные для кодирования.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.
data_length - длина данных для кодирования.

Функция не возвращает значения.

3.base64_decode PROC \
string_to_decode :DWORD, \
result_buffer :DWORD, \
result_buffer_length :DWORD

Вычисляет декодированные данные из base64-строки.
string_to_decode - указатель на ANSI-строку для раскодирования.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Возвращаемое значение:
0 - успех
1 - ошибка выделения памяти

4.SocketInit PROC

Вызывается перед началом работы с интернетом.

Функция не возвращает значения.

5.SocketCleanup PROC

Вызывается после завершения работы с интернетом.

Функция не возвращает значения.

6.urlencodeW PROC text_to_convert :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция для url-кодирования Unicode-строки.
text_to_convert - указатель на Unicode-строку для кодирования.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Возвращаемое значение:
0 - успех
1 - ошибка выделения памяти
2 или 3 - ошибка конвертирования Unicode в UTF-8

7.urlencode PROC text_to_convert :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция для url-кодирования ANSI-строки.
text_to_convert - указатель на ANSI-строку для кодирования.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Функция не возвращает значения.

8.GetHttpHeader PROC content :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция, выделяющая заголовки из ответа сервера.
content - указатель на ответ сервера.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Функция не возвращает значения.

9.GetHttpBody PROC content :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция, выделяющая тело ответа из ответа сервера (только для текстовых данных).
content- указатель на ответ сервера.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Функция не возвращает значения.

9.GetHttpBodyEx PROC content :DWORD, content_length :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция, выделяющая тело ответа из ответа сервера (для любых данных, в том числе бинарных).
content - указатель на ответ сервера.
content_length - длина ответа сервера (можно использовать последний параметр из SendPacket).
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Функция не возвращает значения.

10.GetCookies PROC headers :DWORD, result_buffer :DWORD, result_buffer_len :DWORD

Функция, выделяющая Cookies из заголовков ответа сервера.
headers - указатель на заголовки ответа сервера.
result_buffer - указатель на буфер для записи результата.
result_buffer_length - длина буфера для записи результата.

Функция не возвращает значения.

11.GetHTTPAnswer PROC content :DWORD

Функция, возвращающая код ответа сервера по тексту ответа сервера.
content - указатель на ответ или на заголовки ответа сервера.

Функция возвращает код ответа (DWORD).

12.MD5 PROC string :DWORD, result_buffer :DWORD

Функция, вычисляет MD5 от строки.
headers - указатель на ANSI-строку.
result_buffer - указатель на буфер для записи результата.

Возвращаемое значение:
0 - успех
1 - ошибка получения контекста шифрования
2 - ошибка создания MD5
3 - ошибка хеширования
4 - ошибка получения параметра хеша

Пример вызова использования библиотеки:

Скачать библиотеку и исходные коды можно тут: ZIP

Библиотека для работы с http: 10 комментариев

  1. Можно примеров побольше. Что то не догоняю пока как ей пользоваться, пока на экране одни ерроры рисуются. Я то понимаю , что сам что то намудил, вот и прошу побольше примеров.
    Мне надо отправить POST данные (пароль,логин) и вернуть страничку в окошко.
    Дело в том, что я зарегистрирован во многих партнерках, но в каждый раз заходить на их сайты это гемор, вот решил замутить чтобы все партнерки были в программке, тыкнул на ссылку и получил статистику.

    Но как сделать,теоретически то понятно, но на практике нифига не прет.
    Вот помощи буду от ВАС ждать.

  2. DX, Подскажи, или опубликуй еще парочку примерчиков с этой библиотечкой.
    Работает все хорошо, но никак не пойму, как принять страничку нормальной, а то у меня возвращаются теги HTML, а мне надо чтоб отображалась как буд-то в браузере.
    Подскажи пожайлуста.

    1. Эта либа не позволяет парсить каким-то образом хтмл-код, она контент возвращает как есть. Функции обработки сюда не включены.

  3. Не плохо. Однако для реального применения не очень подходит.
    Нет поддрежки асинхроного режима. (послал запрос и код продолжил выполнение а как будет получен ответ то вызовется кэлбек, это нужно для однопоточных программ, где программеры не имеют возможности или просто не хотят заморачиватся с потоками)
    Нет поддержки https.
    Нет поддержки gzip.
    Нету движка для обработки кукисов, есть тока функция для из получения.
    Для меня особо критичны первые два пункта остальное, так пожелания.

    1. Допиши сам или юзай wininet/winhttp (для извращенцев - винсок).
      Автор и так проделал огромную работу, под этот асм никто ничего путного не пишет вообще.

Добавить комментарий для dx Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *