Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101

Как обратится к API GitHub из программы С++

05.08.2019, 20:00. Показов 3570. Ответов 6

Студворк — интернет-сервис помощи студентам
Я хочу сделать запрос https://api.github.com/users/Zhukovdpua/repos к API github из программы С++. Для работы с сетью использую winsock.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
int main()
{
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        std::cout << "Error" << std::endl;
        exit(1);
    }
 
    struct hostent *phe = gethostbyname("github.com");
    struct in_addr addr;
    memcpy(&addr, phe->h_addr_list[0], sizeof(struct in_addr));
 
 
    SOCKADDR_IN addrGitHub;
    int sizeofaddr = sizeof(addrGitHub);
    addrGitHub.sin_addr.s_addr = addr.S_un.S_addr;
 
    addrGitHub.sin_port = htons(80);
    addrGitHub.sin_family = AF_INET;
 
    SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);
    if (connect(Connection, (SOCKADDR*)&addrGitHub, sizeof(addrGitHub)) != 0)                 
    {
        std::cout << "Error: failed connect to GitHub.\n";
        return 1;
    }
 
    std::cout << "Connected to GitHub!\n\n";
    //Подключение к серверу github, насколько я понимаю, происходит успешно. 
 
 
    send(Connection, "https://api.github.com/users/Zhukovdpua/repos", 256, NULL); //Отправляю запрос
 
    char msg[256];
    recv(Connection, msg, 256, NULL); //Получаю ответ
    std::cout << msg;
 
    WSACleanup();
    return 0;
}
Вот что приходит с сервера (вывод присланного ответа от сервера в консоль): (прикреплён скрин внизу)
400 Bad Request "Мы не получили правильный запрос от вашего браузера"


Если же делать запрос из браузера или командной строки CURL, то ответ приходит рабочий.
Миниатюры
Как обратится к API GitHub из программы С++  
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2019, 20:00
Ответы с готовыми решениями:

Как правильно использовать API github.com?
Как правильно использовать API github.com? Пробую получить информацию по токену с помощью запроса к API описанного по ссылке...

Работа с GitHub API в PHP, как сделать авторизацию ?
Суть задачи такая : пользователь авторизуется через OAuth2 в аккаунте GitHub и получает список своих репозиториев. Как сделать это на PHP +...

Как обратится к изображению в папке проекта программы?
Есть программа, в Debug есть папка с изображениями, которые должны использоваться в программе. Но у меня возникла проблема: возьмем для...

6
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.08.2019, 20:21
Цитата Сообщение от HelloWorld56 Посмотреть сообщение
Вот что приходит с сервера (вывод присланного ответа от сервера в консоль): (прикреплён скрин внизу)
400 Bad Request "Мы не получили правильный запрос от вашего браузера"
Потому что ты посылаешь не http и уж тем более не https запрос.
Здесь проще всего будет использовать библиотеку curl.
0
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
05.08.2019, 20:35  [ТС]
oleg-m1973, я не могу её(libcurl) установить уже дня 4. В этой теме Инструкция по подключению libcurl к Visual Studio 2015 в последнем посту описана моя проблема. Можешь подсказать что-то?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.08.2019, 21:22
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

HelloWorld56,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <wininet.h>
#pragma comment(lib, "Wininet.lib")
 
int main(int argc, char *argv[])
{
    static const DWORD _flags =
        INTERNET_FLAG_SECURE |
        INTERNET_FLAG_KEEP_CONNECTION |
        INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
        INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
 
    HINTERNET hInet = ::InternetOpenW(L"request", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
 
    HINTERNET cnn = ::InternetConnectW(hInet, L"api.github.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    HINTERNET req = ::HttpOpenRequestW(cnn, L"GET", L"/users/oleg-m1973/repos", HTTP_VERSION, NULL, NULL, _flags, 0);
    BOOL res = ::HttpSendRequestW(req, nullptr, 0, nullptr, 0);
 
    DWORD dwDataSize = 0;
    DWORD dwLengthDataSize = sizeof(dwDataSize);
    res = ::HttpQueryInfo(req, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwDataSize, &dwLengthDataSize, NULL);
 
    std::unique_ptr<char[]> sp(new char[dwDataSize + 1]);
    DWORD dwRead = 0;
    res = ::InternetReadFile(req, sp.get(), dwDataSize, &dwRead);
    sp[dwRead] = 0;
    std::cout << sp.get() << std::endl;
    return 0;
}
Добавлено через 52 секунды
Только InternetCloseHandle добавь
3
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
05.08.2019, 22:05  [ТС]
oleg-m1973, что такое wininet.h?
Миниатюры
Как обратится к API GitHub из программы С++  
0
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
05.08.2019, 22:06  [ТС]
oleg-m1973, а библиотека Qt поддерживает http/https?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.08.2019, 22:15
Цитата Сообщение от HelloWorld56 Посмотреть сообщение
oleg-m1973, что такое wininet.h?
Стандартный виндовский заголовок. Сделай #include <windows.h> перед ним.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2019, 22:15
Помогаю со студенческими работами здесь

Работа с классом (как вызвать или обратится к классу из основной программы?)
помогите пожайлуста, подскажите как вызвать или обратится к классу из основной программы получается код должен создавать и заполнять трех...

Как обновлять программы c Github(git pull)?
Собираюсь установить у себя медицинские экспертные системы. Если авторы что то поправят в исходниках, то если от разных авторов будет все...

API Github
Всем привет, подскажите библиотеки для работы(загрузка, удаление) файлов в репозитории. Ну, желательно бы и ссылку на статью, где есть...

GitHub API
Добрый день уважаемые форумчане, на протяжении многих лет черпал инфу с сего форума, и даже не нуждался в регистрации, так как искать...

Как обратиться к api из программы, запущенной на том же сервере, где расположена api
Доброго времени суток Есть программа и api написанные на Blazor, которые работают под iis на одном сервере. Если в запросе данных из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru