我有一个Digital object identifier,里面有一堆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
。还可以包括一些标头以指定响应的格式。当我将网址http://dx.doi.org/10.1002/(SICI)1096-9861(19960304)366:2<270::AID-CNE7>3.0.CO;2-2
直接粘贴到Chrome地址栏时,它可以正常工作,我会被重定向到适合该文章的页面。但是,我无法在命令行的curl
或Ruby脚本中使用此URL或使用Ruby的HTTParty gem获得相同的响应。我尝试手动%编码所有特殊字符并遇到同样的问题:
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
上运行Ruby的url1
只会转义尖括号,尽管它们的状态为保留字符,但仍保留括号,分号和冒号。有人可以解释这里发生了什么,以及我如何以编程方式从此URL中检索?
答案 0 :(得分:1)
从您的请求中删除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"