图片缩略图

urlread2

version 1.2.0.0 (9.5 KB) by 吉姆Hokanson
一般化HTTP请求,提供对输入和输出的更多控制和访问
4.7
11评级

27下载

更新2012年3月26日

视图版本历史

查看许可协议

版本1.1< / p >< p >替代urlread。urlread2文件中的示例函数展示了如何进行与urlread中相同的调用。可以编写(有些已经提供)帮助函数来提供额外的功能,而不需要总是修改urlread2代码。< / p >< p >具体的改进:
-改进了unicode支持金宝app
改进的二进制检索支持金宝app
-请求和响应头访问
-响应状态访问< / p >< p >有关实施的技术说明可在以下网址找到:
http://undocumentedmatlab.com/blog/expanding-urlreads-capabilities/

引用作为

吉姆Hokanson(2021)。urlread2(//www.tatmou.com/matlabcentral/fileexchange/35693-urlread2), MATLAB中央文件交换。检索.< / p >< / div >

意见及评分(59

Mehdi Javdanitehran

zwbxyzeng

@Jim Hokanson,谢谢你的回复。
我犯了个错误。“BigData / V2 / wavedata / 0 ?wavefile=G0002-2/H09/2017/23/45/52/ae623e20-9eda-4487-b403-405c26ffcb29"是url选择器不是主体。body设置为None。< / p >< p >在python中,下面的代码可以工作。它保持连接,然后我可以改变url选择器读取不同的wave文件,而无需请求新的连接。我正在做并行计算,有80个cpu从同一台服务器请求波文件。如果每次请求一个新的连接,服务器都无法处理,将会超时。< / p >< p >con = http.client.HTTPConnection("172.16.2.1", 5010)
而真正的:
con.request(“得到”、“/ DFS / TNode /文件?文件名= G0002-1 / h02/2018/10/44/38/4a3cc8f1 - b48f 40 - df - 96 - b1 - 5 - d1e452fd63c”,标题={“连接”:“维生”})
结果= con.getresponse ()
result.read ()
print(结果。原因,result.getheaders ())< / p >< / div >< / div >

吉姆Hokanson

@zwbxyzeng< / p >< p >我的代码不支持连接重用。金宝app一般来说,我不完全确定你想要完成什么。< / p >< p >该代码确实允许使用GET的主体,尽管这不大可能是正确的行为。通常使用GET时,所有参数都是通过URL传递的,如第一个示例所示。< / p >< / div >< / div >

zwbxyzeng

zwbxyzeng

嗨,我尝试通过这个工具重用http连接。
我可以得到正确的结果通过下面的脚本,它的行为作为matlab 'webread'功能的保存。
urlChar = 'http://172.16.0.131:2089/BigData/V2/wavedata/0?wavefile=G0002-2/H09/2017/23/45/52/ae623e20-9eda-4487-b403-405c26ffcb29';
方法=‘得到’;身体= ";headersIn = [];
(输出,临时演员)= urlread2 (urlChar、方法、主体headersIn);< / p >< p >但是,如果我尝试重用HTTP连接,它会失败。
urlChar = 'http://172.16.0.131:2089/';
方法=“得到”;
身体= ' BigData / V2 / wavedata / 0 ? wavefile = G0002-2 / H09/2017/23/45/52 / ae623e20 - 9 eda - 4487 b403 - 405 c26ffcb29”;
headersIn = [];
(输出,临时演员)= urlread2 (urlChar、方法、主体headersIn);< / p >< p >BR
Feibai< / p >< / div >< / div >

吉姆Hokanson

@Bastian澄清一下,我没有对webread做任何改动。现在用webread可能做所有的事情,我不确定。如果没有,那么有必要将webread的内部Java调用与我的包装代码合并。阅读上面链接的技术描述可能会有帮助。也许更重要的是了解HTTP(请求方法、请求头、请求正文、响应头、响应正文)。如果你熟悉Python,你应该能够使用请求做你想做的事情。我也简单考虑在Matlab中包装请求(使用Matlab的Python接口),但我只是不再使用Matlab非常多的这类事情。< / p >< / div >< / div >

巴斯蒂安·安徒生

抱歉,我不清楚。我很熟悉Matlab,但不是任何类型的在线数据检索在它,不确定什么/在哪里你改变了一些东西。如果修复它是一个更大的过程,我可能会尝试学习如何在python中做我想做的事情:)< / p >< / div >< / div >

吉姆Hokanson

@Bastian如果你需要使用Matlab函数的一般帮助,你应该问其他地方(例如,Answers, StackOverflow)。Point指出,代码需要更新,以适应新的安全协议和/或证书问题。等我有空闲时间搞点东西的时候我会考虑的。< / p >< / div >< / div >

巴斯蒂安·安徒生

你好,< / p >< p >我遇到了马特和奥克塔维奥一直在讨论的问题。然而,我是这类程序的新,所以希望你可以帮助我如何通过使用“webread”修复它。< / p >< p >BR
巴斯蒂安·< / p >< / div >< / div >

金城温

奥克塔维奥加西亚

@Matt @Jim,非常感谢你的支持.....金宝app有一段时间,我觉得只有一个人有这个问题.....现在TLS 1.2使用的是java文件。选择行不通,至少对我来说是这样。我正在使用“fred”和“fetch”函数来直接访问fred (St Louis Fed)。但我会用马特说的“网络面包”。谢谢你们的支持,因为我不是一个软件极客,这是非常感谢!!金宝app< / p >< / div >< / div >

吉姆Hokanson

@Matt,谢谢你的信息。看起来Matlab Java请求的内部发生了一些变化。在不久的将来,我将尝试将新功能整合到urlread2中。< / p >< / div >< / div >

马特

奥克塔维奥,webbread是显而易见的解决方案。去https://docs.quandl.com/docs/time-series弄清楚如何建立你的网址。我用这个Matlab提供的函数替换了旧的第三方api。< / p >< p >谢谢你,吉姆。< / p >< / div >< / div >

马特

webread工作,这就是为什么我认为问题一定是urlread2,这是第三方API的一部分(https://github.com/quandl/Matlab,我们一直在使用…我们需要深入挖掘Quandl api文档,弄清楚如何替换该包的所有功能……只是想知道urlread2是否有新的版本//www.tatmou.com/matlabcentral/fileexchange/35693-urlread2可能使原始API函数工作……< / p >< / div >< / div >

吉姆Hokanson

@Matt @Octavio你能确认TLSV1.2链接现在是否解决了问题吗?我能想到的唯一其他解决方案是尝试操作证书
//www.tatmou.com/matlabcentral/answers/39563-managing-public-key-certificates-in-matlab

如果给我一些测试代码,我可以尝试自己调试它,但总体来说,这个解决方案几乎肯定需要修复Matlab的JRE,而不是我的代码。< / p >< / div >< / div >

马特

我和奥克塔维奥有同样的问题。我认为Quandl在9月19日回到了旧API,实际上几天前刚刚进行了TLSv1.2升级。是否可能需要更新urlread2以使用新的ssl协议TLSv1.2?< / p >< / div >< / div >

奥克塔维奥加西亚

谢谢@Jim的链接。在向TLS 1.2过渡的过程中,继续使用API并不需要下面提到的Java更新。连接不好,或者与连接类似的东西(我在不同网站的不同电脑上重现了这个问题,给了我相同的错误....这让我很困惑)。< / p >< p >我已经用过你们提出的解了但这个错误至少在我看来是随机出现的。从22日21日到9月30日运行良好.....昨天和今天不.....的原因??....我不知道。我的代码是一样的,有时候有用,有时候不行。< / p >< / div >< / div >

奥克塔维奥加西亚

我知道从9月18日开始在QUANDL中进行TLS 1.2版本的转换。我更新了Matlab 2016b到最新的Java, Oracle让我,版本8更新181(构建1.8.0_181-b13),下面的说明,但仍然不能与最新版本。< / p >< p >>>java版本
ans =
Java 1.8.0_181-b13 with Oracle Corporation Java HotSpot(TM) 64位服务器虚拟机混合模式< / p >< p >如何更改MATLAB在Windows上使用的Java虚拟机(JVM) ?- MATLAB答案- MATLAB中心< / p >< p >响应流未定义
下面是一个Java错误转储(截断):
使用urlread2错误。urlread2(第217行)
Java异常发生:
javax.net.ssl.SSLException: java.lang.IllegalArgumentException:空键< / p >< p >在Quandl错误。api(37)行
[response, extras] = urlread2。urlread2(url, 'GET', '', headers);< / p >< p >在Quandl错误。得到(第124行)
csv = Quandl。api(路径,“参数”,params);< / p >< p >zt_Usa_Data错误(第54行)
NYSEDATA = Quandl。get('NYXDATA/MARKET_CREDIT', 'authcode', 'FyHsP72UsMdvyks8wVsj', 'collapse', '崩溃')
“月”、“start_date’,fecha_inicio);< / p >< / div >< / div >

吉姆Hokanson

@Benvaulter< / p >< p >如问题所示,这很可能是Matlab组件方面的错误。我的第一个猜测是尝试使用更新版本的Matlab (2017b或更新版本),因为Java版本从Java 7升级到Java 8。如果这不起作用,我也建议人们尝试使用Matlab的Python接口包装Python的请求库。如果我必须重做这段代码,我就会这么做。< / p >< p >吉姆< / p >< / div >< / div >

Benvaulter

嗨,谢谢你的巨大贡献。Urlread2为我日常使用的许多解决方案提供了动力。金宝搏官方网站当我试图读取/连接到特定的服务时,我遇到了以下错误-例如,到cex的API。io (https://cex.io/cex-api)。当我使用urlread2与任何RESTful url,我收到以下错误:< / p >< p >响应流未定义
下面是一个Java错误转储(截断):
使用urlread2时出错(第217行)
Java异常发生:
javax.net.ssl.SSLException: Received fatal alert: protocol_version .日志含义< / p >< p >当我使用不同的Matlab解决方案连接到websocket时,同样的错误也会出现(不确定这是否相关,但我注意到相同的错误转储)。您是否知道是什么问题导致了与某些服务器的连接问题(在本例中为cex.io)?提前谢谢!< / p >< / div >< / div >

法里德·jamaluddin

@Jim
我只是发现,只有头部名称设置为'授权'不能被添加。你知道怎么安排吗?< / p >< / div >< / div >

法里德·jamaluddin

@Jim
添加四个头信息的示例:
cy_header_1 = http_createHeader(日期,日期);
cy_header_2 = http_createHeader(“X-Requested-With”、“XMLHttpRequest”);
cy_header_3 = http_createHeader(“授权”,cy_sign);
cy_header_4 = http_createHeader(“接受”,“application / json, * / *”);
Header =[cy_header_1 cy_header_2 cy_header_3 cy_header_4];< / p >< p >(反应、状态)= urlread2 (url,‘得到’,{},头);< / p >< p >并在urlread2中添加urlConnection.getRequestProperties()到第168行左右,它将只打印3个通用头文件,除了自定义授权头文件。< / p >< p >for iHeader = 1:length(headersIn)
curHeader = headersIn (iHeader);
urlConnection.setRequestProperty (curHeader.name curHeader.value);
结束< / p >< p >urlConnection.getRequestProperties ()< / p >< / div >< / div >

吉姆Hokanson

@fareed< / p >< p >你能给我发消息并发送我可以尝试和调试的示例代码吗?谢谢。< / p >< / div >< / div >

法里德·jamaluddin

你好,
添加urlConnection.getRequestProperties(),在分配头信息的for循环第168行之后显示所有分配的头信息,这表明自定义头信息没有添加到头信息中。我的自定义头名称是授权,只有头名称像(日期,接受和X-Requested-With)被修改。请帮忙吗?< / p >< / div >< / div >

吉姆Hokanson

@ado< / p >< p >我认为这很可能是受支持的TLS/SSL安全级别的不同。金宝app使用Java 8 (matlab2017b)可能会有帮助。此外,您应该验证您试图连接到的任何网站与Matlab的urlread工作。如果它可以,但不能与我的代码一起工作,那么可以随意发送电子邮件给我,告诉我要测试的站点。如果它不能与Matlab的urlread一起工作,那么你应该联系Mathworks支持。金宝app< / p >< / div >< / div >

ado nunes

它似乎不工作与https,我总是得到错误:
使用urlread2时出错(第217行)
Java异常发生:
javax.net.ssl.SSLException: Received fatal alert: protocol_version .日志含义< / p >< p >有人知道怎么解吗?< / p >< / div >< / div >

Arek Majka

几个月来,我一直在成功地使用这个API。它今天停止工作了……我得到错误:< / p >< p >使用Quandl错误。api(36行)
<!DOCTYPE html >
<!——[if lt IE 7]>
<!——[if IE 7]>
<!——[if IE 8]>
<!——[if gt IE 8]>
<头>
<标题>拒绝访问|www.quandl.com使用CloudFlare限制访问
< meta charset = " utf - 8 " / >
< meta http-equiv = " - type”内容= " text / html;utf - 8字符集= " / >



.
<!——[if lt IE 9]>
<风格type = " text / css " >身体{保证金:0;填充:0}> < /风格
<!——[if lte IE 9]>
<!——[if gte IE 10]> < script type = " text / javascript " src = " / cdn-cgi /脚本/ zepto.min.js”> < /脚本> < !——< !(endif)——>
< script type = " text / javascript " src = " / cdn-cgi /脚本/ cf.common.js”> > < /脚本< / p >< p >< / >头
<身体>
< div id = " cf-wrapper " >