Название: Работа с Youtube.API через сокеты Отправлено: 100 and 80 от Ноябрь 11, 2014, 16:20 Добрый вечер.
Изучаю основы сетевого программирования, с QNAM, QWebView более менее знаком, поэтому решил попробовать сделать через QTcpSocket. Создаю сокет и соединяю слоты и сигналы: Код: socket = new QTcpSocket(); Делаю коннект: Код: socket->connectToHost("www.googleapis.com", 443, QIODevice::ReadWrite); Приходит сигнал connected, далее посылаю запрос GET, как в примере https://developers.google.com/youtube/v3/sample_requests со своим ключом: Код: QString str("GET https://www.googleapis.com/youtube/v3/search?part=snippet&q=Qt+examples"\ Итог дисконнект - сигнал readyRead не приходит, и в статистике использования в google ничего нет - запрос не проходит. Тот же запрос через браузер проходит и получаю ответ. Название: Re: Работа с Youtube.API через сокеты Отправлено: vulko от Ноябрь 11, 2014, 17:23 Цитировать GET {base-URL}/channels?part=contentDetails &mine=true Это... несколько утрированное, я бы даже сказал схематичное, представление HTTP запроса :) Означает что нужно сделать HTTP-GET запрос на http://youtube.com/channels?part=contentDetails&mine=true, а не тупо в сокет чето запихать. http://developer.nokia.com/community/wiki/Creating_an_HTTP_network_request_in_Qt https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#newwindow=1&q=qt%20http%20get%20request&qscrl=1 Название: Re: Работа с Youtube.API через сокеты Отправлено: 100 and 80 от Ноябрь 11, 2014, 18:49 А, все разобрался. Вот так работает и заменить надо было QTcpSocket на QSslSocket:
Код: QString str("GET /youtube/v3/search?part=snippet&q=YouTube+Data+API&type=video&videoCaption=closedCaption&key=КЛЮЧ HTTP/1.1\r\nHost: www.googleapis.com\r\n\r\n"); Теперь еще такой вопрос - получая ответ есть возможность как-то заголовки разобрать автоматически или только как строку? Хотел ответ конвертировать в QJsonDocument, но нужно отбросить заголовки у QByteArray. Название: Re: Работа с Youtube.API через сокеты Отправлено: torwig от Ноябрь 11, 2014, 21:15 Например, ищи в полученном QByteArray позицию "'\r\n\r\n" и отсекай.
Название: Re: Работа с Youtube.API через сокеты Отправлено: kibsoft от Ноябрь 11, 2014, 21:40 А, все разобрался. Вот так работает и заменить надо было QTcpSocket на QSslSocket: Не надо так извращаться, используйте QNetworkAccessManager/QNetworkRequest/QNetworkReply, как vulko сказал выше.Код: QString str("GET /youtube/v3/search?part=snippet&q=YouTube+Data+API&type=video&videoCaption=closedCaption&key=КЛЮЧ HTTP/1.1\r\nHost: www.googleapis.com\r\n\r\n"); Теперь еще такой вопрос - получая ответ есть возможность как-то заголовки разобрать автоматически или только как строку? Хотел ответ конвертировать в QJsonDocument, но нужно отбросить заголовки у QByteArray. |