Как сказал Анмол Гаутам , вам нужно переопределить функцию QWebEnginePage :: acceptNavigationRequest и получить необходимые данные с помощью JavaScript.
Вот пример, как это сделать:
mywebpage.h
#include
class MyWebPage : public QWebEnginePage
{
Q_OBJECT
public:
explicit MyWebPage(QWebEngineProfile *profile = Q_NULLPTR, QObject *parent = Q_NULLPTR);
protected:
bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame);
}
mywebpage.cpp
[111 ]
используйте QWebEngineView :: setPage , чтобы установить для своего подкласса WebPage значение WebView, прежде чем вызывать функцию загрузки WebViews.
Вот ссылка для получения дополнительной информации о HTML DOM form Collection
Я не знаком с тем, как работает S3, поэтому я не знаю, возможно ли это решение. Но не могли бы вы просто перенаправить браузер пользователя в файл? Если я правильно понимаю, S3 позволяет вам создавать веб-URL для любого из файлов в вашем ведре. Поэтому, если, скажем, это платные загрузки, вы можете сделать так, чтобы S3 сгенерировал временный URL для этой загрузки , а затем удалил его, как только пользователь загрузил его.
Если это не вариант, вы Можно попробовать следующие классы PHP:
fopen ()
, fread ()
, и т.д. fopen ('s3: // ...')
. Редактировать:
На этой странице есть информация о том, как " предварительно аутентифицировать "запрос путем кодирования ключа аутентификации в URL. Он находится в разделе под названием: Альтернатива аутентификации запроса строки запроса .
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Затем просто перенаправьте пользователя на $ url
, и он сможет загрузить файл. Подпись кодируется с помощью односторонней схемы шифрования (sha1), поэтому нет риска раскрытия вашего секретного ключа доступа AWS.
fopen ('s3: // ...')
.
Редактировать:
На этой странице есть информация о том, как " предварительно аутентифицировать "запрос путем кодирования ключа аутентификации в URL. Он находится в разделе под названием: Альтернатива аутентификации запроса строки запроса .
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Затем просто перенаправьте пользователя на $ url
, и он сможет загрузить файл. Подпись кодируется с помощью односторонней схемы шифрования (sha1), поэтому нет риска раскрытия вашего секретного ключа доступа AWS.
fopen ('s3: // ...')
.
Редактировать:
На этой странице есть информация о том, как " предварительно аутентифицировать "запрос путем кодирования ключа аутентификации в URL. Он находится в разделе под названием: Альтернатива аутентификации запроса строки запроса .
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Затем просто перенаправьте пользователя на $ url
, и он сможет загрузить файл. Подпись кодируется с помощью односторонней схемы шифрования (sha1), поэтому нет риска раскрытия вашего секретного ключа доступа AWS.
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Затем просто перенаправьте пользователя на $ url
, и он сможет загрузить файл. Подпись кодируется с помощью односторонней схемы шифрования (sha1), поэтому нет риска раскрытия вашего секретного ключа доступа AWS.
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Затем просто перенаправьте пользователя на $ url
, и он сможет загрузить файл. Подпись кодируется с помощью односторонней схемы шифрования (sha1), поэтому нет риска раскрытия вашего секретного ключа доступа AWS.
Вы пробовали использовать только readfile (" http: // username: password @ host /filename.ext")?
Это просто пропустит и запишет непосредственно в выходной буфер, однако, если тип содержимого имеет значение, вам необходимо сначала проверить это.
Использование en URL в качестве аргумента для файла чтения также требует, чтобы PHP был скомпилирован с поддержкой urlwrapper.
Вы пытались использовать http_get с request_options для указания типа httpauth и httpauth? Хотя я не помню, предполагает ли этот метод строковый допустимый тип, который может не работать для двоичного кода.
Если это удастся, вы сможете указать правильный тип MIME и записать его в браузер.