gpt4 book ai didi

matlab - 如何提供用户名/密码以使用 Matlab urlread/urlwrite 访问 Web 资源?

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:21 25 4
gpt4 key购买 nike

this question 开始,关于使用最初隐藏在 Javascript 函数后面的 Matlab 访问网页上的 PDF。我现在有一个允许我直接访问页面的 URL,使用 Matlab webrowser 对象(PDF 出现在屏幕上)可以正常工作,但是为了保存 PDF 以进行后续处理,我似乎需要使用 Matlab urlread/urlwrite 函数.但是,这些函数没有提供提供身份验证凭据的方法。

如何为 Matlab 的 urlread/urlwrite 函数提供用户名/密码?

最佳答案

Matlab 的 urlread() 函数有一个“params”参数,但这些是在 URL 中编码的 CGI 样式参数。身份验证是使用较低级别的 HTTP 请求参数完成的。 Urlread 不支持这些,但您可以直接针对 Java URL 类进行编码以使用它们。

您还可以使用 Sun 的 sun.misc.BASE64Encoder 类以编程方式进行 Base 64 编码。这是一个非标准类,不是标准 Java 库的一部分,但您知道随 Matlab 一起提供的 JVM 将包含它,因此您可以对其进行编码。

这是一个快速的技巧,展示了它的实际应用。

function [s,info] = urlread_auth(url, user, password)
%URLREAD_AUTH Like URLREAD, with basic authentication
%
% [s,info] = urlread_auth(url, user, password)
%
% Returns bytes. Convert to char if you're retrieving text.
%
% Examples:
% sampleUrl = 'http://browserspy.dk/password-ok.php';
% [s,info] = urlread_auth(sampleUrl, 'test', 'test');
% txt = char(s)

% Matlab's urlread() doesn't do HTTP Request params, so work directly with Java
jUrl = java.net.URL(url);
conn = jUrl.openConnection();
conn.setRequestProperty('Authorization', ['Basic ' base64encode([user ':' password])]);
conn.connect();
info.status = conn.getResponseCode();
info.errMsg = char(readstream(conn.getErrorStream()));
s = readstream(conn.getInputStream());

function out = base64encode(str)
% Uses Sun-specific class, but we know that is the JVM Matlab ships with
encoder = sun.misc.BASE64Encoder();
out = char(encoder.encode(java.lang.String(str).getBytes()));

%%
function out = readstream(inStream)
%READSTREAM Read all bytes from stream to uint8
try
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier;
byteStream = java.io.ByteArrayOutputStream();
isc = InterruptibleStreamCopier.getInterruptibleStreamCopier();
isc.copyStream(inStream, byteStream);
inStream.close();
byteStream.close();
out = typecast(byteStream.toByteArray', 'uint8'); %'
catch err
out = []; %HACK: quash
end

关于matlab - 如何提供用户名/密码以使用 Matlab urlread/urlwrite 访问 Web 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1317931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com