我有一个数字对象标识符,其中包含一组URI保留字符:
10.1002/(SICI)1096-9861(19960304)366:2<270::AID-CNE7>3.0.CO;2-2
我试图使用这个DOI从DOI解析API中提取书目数据。API的URL方案是http://dx.doi.org/DOIHERE。还可以包括一些标头来指定响应的格式。当我将URL http://dx.doi.org/10.1002/(SICI)1096-9861(19960304)366:2<270::AID-CNE7>3.0.CO;2-2直接粘贴到Chrome地址栏中时,它可以正常工作,并被重定向到适合本文的页面。但是,无论是在命令行的curl中还是在HTTParty脚本中,或者使用Ruby,我都无法使用这个URL获得相同的响应。我已经尝试过手动对所有特殊字符进行%编码,并且有相同的问题:
url1 = "http://dx.doi.org/10.1002/(SICI)1096-9861(19960304)366:2<270::AID-CNE7>3.0.CO;2-2"
url2 = "http://dx.doi.org/10.1002%2F%28SICI%291096-9861%2819960304%29366%3A2%3C270%3A%3AAID-CNE7%3E3.0.CO%3B2-2"
headers = { "Accept" => 'application/x-bibtex;q=1.0' }
`curl -LH "Accept: application/x-bibtex;q=1.0" -i #{url1}` # empty string response
`curl -LH "Accept: application/x-bibtex;q=1.0" -i #{url2}` # 504 Gateway timeout error
HTTParty.get url1, headers: { "Accept" => 'application/x-bibtex;q=1.0' } # Ruby throws InvalidURI error
HTTParty.get url2, headers: { "Accept" => 'application/x-bibtex;q=1.0' } # blank response body此外,在URI.escape上运行url1只转义尖括号,保留括号、分号和冒号,尽管它们是保留字符。有人能解释一下这里发生了什么,以及我如何编程地从这个URL中检索吗?
发布于 2014-04-01 07:22:05
从请求中删除H "Accept: application/x-bibtex;q=1.0"。在浏览链接时,没有指定此标头。因此,不需要从卷曲中指定。
下面一个和我很好地合作:
curl -LH -i -v "http://dx.doi.org/10.1002%2F%28SICI%291096-9861%2819960304%29366%3A2%3C270%3A%3AAID-CNE7%3E3.0.CO%3B2-2"https://stackoverflow.com/questions/22775353
复制相似问题