Skip to content

Commit 564b9dc

Browse files
authored
Added default user-agent to get requests (#438)
1 parent 2a76c43 commit 564b9dc

File tree

5 files changed

+67
-0
lines changed

5 files changed

+67
-0
lines changed

ReactQt/runtime/src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ set(
125125
asynclocalstorage.cpp
126126
reactitem.cpp
127127
rootview.cpp
128+
reactnetworkaccessmanager.cpp
128129
mouseeventsinterceptor.cpp
129130
testmodule.cpp
130131
attachedproperties.cpp

ReactQt/runtime/src/networking.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ void Networking::sendRequest(const QString& method,
8787

8888
QNetworkRequest request(url);
8989

90+
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
9091
for (const QString& key : headers.keys()) {
9192
request.setRawHeader(key.toLocal8Bit(), headers[key].toString().toLocal8Bit());
9293
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Copyright (c) 2017-present, Status Research and Development GmbH.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#include "reactnetworkaccessmanager.h"
12+
13+
ReactNetworkAccessManager::ReactNetworkAccessManager(QObject* parent) : QNetworkAccessManager(parent) {}
14+
15+
QNetworkReply* ReactNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
16+
const QNetworkRequest& originalReq,
17+
QIODevice* outgoingData) {
18+
QNetworkRequest requestWithHeader = originalReq;
19+
requestWithHeader.setRawHeader("User-Agent", "react-native-desktop");
20+
return QNetworkAccessManager::createRequest(op, requestWithHeader, outgoingData);
21+
}
22+
23+
QNetworkAccessManager* ReactNetworkAccessManagerFactory::create(QObject* parent) {
24+
return new ReactNetworkAccessManager(parent);
25+
}
26+
27+
#include "reactnetworkaccessmanager.moc"
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Copyright (c) 2017-present, Status Research and Development GmbH.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#ifndef REACTNETWORKACCESSMANAGER_H
12+
#define REACTNETWORKACCESSMANAGER_H
13+
14+
#include <QNetworkAccessManager>
15+
#include <QQmlNetworkAccessManagerFactory>
16+
17+
class ReactNetworkAccessManager : public QNetworkAccessManager {
18+
Q_OBJECT
19+
20+
public:
21+
ReactNetworkAccessManager(QObject* parent = nullptr);
22+
23+
protected:
24+
virtual QNetworkReply* createRequest(QNetworkAccessManager::Operation op,
25+
const QNetworkRequest& originalReq,
26+
QIODevice* outgoingData = nullptr);
27+
};
28+
29+
class ReactNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory {
30+
public:
31+
QNetworkAccessManager* create(QObject* parent) override;
32+
};
33+
34+
#endif // REACTNETWORKACCESSMANAGER_H

ReactQt/runtime/src/rootview.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "bridge.h"
2222
#include "eventdispatcher.h"
2323
#include "layout/flexbox.h"
24+
#include "reactnetworkaccessmanager.h"
2425
#include "rootview.h"
2526
#include "uimanager.h"
2627
#include "utilities.h"
@@ -311,6 +312,9 @@ void RootView::componentComplete() {
311312
loadDevMenu();
312313
#endif // RCT_DEV
313314

315+
ReactNetworkAccessManagerFactory* networkManagerFactory = new ReactNetworkAccessManagerFactory();
316+
qmlEngine(this)->setNetworkAccessManagerFactory(networkManagerFactory);
317+
314318
QTimer::singleShot(0, [=]() {
315319
// TODO: setQmlEngine && setNetworkAccessManager to be just setQmlEngine && then internal?
316320
d->bridge->setQmlEngine(qmlEngine(this));

0 commit comments

Comments
 (0)