Could someone explain to me why this would fail with an obscure message
webread('http://website/', 'Authorization', ['Basic ' matlab.net.base64encode(['me:secr3t'])]) The reason is "error:14090086:SSL routines:ssl3_get_server_certificate:certificateverify failed". Check your certificate file (C:\Program Files\MATLAB\R2018a\sys\certificates\ca\rootcerts.pem) for expired, missing or invalid certificates.
Whereas this (lightly modified and shamelessly stolen from stack overflow) appears to have no problems. Is webread doing something kooky that causes it to barf on the proxy server, where java is not? Why does matlab have certificate problems?
urlread_auth('https://website/','me','secr3t' )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 ' matlab.net.base64encode([user ':' password])]);conn.connect();info.status = conn.getResponseCode();info.errMsg = char(readstream(conn.getErrorStream()));s = readstream(conn.getInputStream());endfunction 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
endend
Best Answer