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

Суббота, 22. Август 2009
Раздел: Assembler, автор:

Написал небольшую библиотеку на ассемблере (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

 Обсудить на форуме


Получать обновления на почту:     

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

  1. Прикольная тема, да и еще на ассемблере! Спасибо!

    [Ответить]


  2. DOS :

    Спасибо это то что мне надо! А то родные функции от винды складали какие-то мазохисты!

    [Ответить]


  3. МимоПроходящий :

    или у меня браузер глючит, или тут действительно желтый шрифт на белом фоне

    [Ответить]


  4. Виктор :

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

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

    [Ответить]


  5. Виктор :

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

    [Ответить]

    dx:

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

    [Ответить]


  6. mikser :

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

    [Ответить]

    flisk:

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

    [Ответить]

  7. Спасибо, автор думаю не будет против, если я перепишу либру под FASM?

    [Ответить]

    dx:

    Не за что, переписывай, не жалко)

    [Ответить]


Оставьте ваш комментарий