我写了一小段代码来从artifactory仓库下载maven-metadata.xml文件。
这很简单,就像
URLConnection c = new URL("http://...").openConnection();
InputStream is = c.getInputStream()
输入流,然后我用它来创建一个XML文档对象。当这样做时,我得到以下数据。
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>be.comp.mapp</groupId>
<artifactId>mapp3.service.universemanager</artifactId>
<version>1.0.0.0-20150810.155925-225</version>
<versioning>
<latest>1.0.0.0-SNAPSHOT</latest>
<versions>
<version>1.0.0.0-SNAPSHOT</version>
</versions>
<lastUpdated>20150811130209</lastUpdated>
</versioning>
</metadata>
这实际上是不完整的,与我在谷歌浏览器中使用完全相同的URL得到的文件相比。
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>be.comp.mapp</groupId>
<artifactId>mapp3.service.universemanager</artifactId>
<version>1.0.0.0-20150810.155925-225</version>
<versioning>
<snapshot>
<timestamp>20150812.135251</timestamp>
<buildNumber>231</buildNumber>
</snapshot>
<lastUpdated>20150812135517</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<classifier>tests</classifier>
<extension>jar</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
<snapshotVersion>
<classifier>test-sources</classifier>
<extension>jar</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
<snapshotVersion>
<classifier>javadoc</classifier>
<extension>jar</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
<snapshotVersion>
<classifier>sources</classifier>
<extension>jar</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
<snapshotVersion>
<extension>jar</extension>
<value>1.0.0.0-20150812.135251-231</value>
<updated>20150812135251</updated>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
我试图通过设置URLConnection的用户代理或以不同方式配置Artifactory repo来解决这个问题,但无法解决这个奇怪的问题。
我也有同样的问题。他们似乎有一些基于UserAgent的逻辑。所以,如果你发送User-Agent.OpenConnection(); InputStream is = c...: Java1.8.0_251,就像URLConnection默认的那样,那么它会给你一部分内容。如果你发送任何其他的UserAgent,那么就可以了。
URLConnection hc = new URL(url).openConnection();
hc.setRequestProperty("User-Agent", "myJavaCode");
return hc.getInputStream()