如何从安全链接确定下载链接?

时间:2014-04-12 11:26:50

标签: java php html jsoup

这是我在stackoverflow上的第一篇文章。 StackOverflow在遇到任何困难时一直是我的帮手,我在编码时会遇到。

好吧,不要浪费太多时间,让我谈谈我遇到的问题,

对于一个项目,我正在建立数据库。

我有一个这种格式的超链接数据库,

http://link.xyz.com/?id=108
http://link.xyz.com/?id=109
httpp://link.xyz.com/ ID = 110

等等。

这些链接在浏览器中启动时,会将我重定向到开始下载内容的下载链接。

示例:

当在浏览器中打开httpp://link.xyz.com/?id = 108时,它会将我重定向到以下网址。

httpp://xyz.com/abc/pqr/some_content.avi [下载链接]。

所以我正在寻找一个解决方案,将我庞大的超链接列表转换为下载链接。

解决方案是任何编程语言都可以接受,只要将安全链接转换为下载链接。

我尝试在JAVA中使用HttpURLConnection和几个库但没有成功。

我抛弃了以下异常,

Request URL ... httpp://link.xyz.com/?id=3108
Response Code ... 403
java.io.IOException: Server returned HTTP response code: 403 for URL: httpp://link.xyz.com/?id=3108
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at Fetch.main(Fetch.java:56)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: httpp://link.xyz.com/?id=3108
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at Fetch.main(Fetch.java:26)



P.S上述异常仅由这些链接引起,程序与其他链接运行良好。

伙计们请帮助,这个问题正在扼杀我,因此我无法在项目中取得进展。

注意:有意添加httpp,因为我无法发布超过2个超链接

谢谢

1 个答案:

答案 0 :(得分:1)

403 HTTP错误代码是" Forbidden"的代码。服务器不希望您访问该资源。

获取此响应代码的一个原因是您没有登录。服务器希望您在允许下载之前使用用户名和密码登录,可能是对登录表单的HTTP-POST请求在网站的某个地方。然后它会在标题中回复Set-Cookie:,其中包含一个session-id,用作验证您的身份。它会期望您在任何将来的请求的Cookie:标题中包含相同的值。

另一个原因可能是网站检测到您没有使用网络浏览器,并希望阻止您抓取其内容。你应该尊重这一点!如果您真的想忽略网站管理员的意愿,您需要找出究竟是什么原因导致他们将您的程序检测为非浏览器。它可能只是检查您的User-Agent标题,但是有数百万种其他方式可能会使您的程序可能表现不同,从而触发检测。如果不知道服务器检查什么,就无法给出任何正确答案。

下一个问题将在重定向之后。您可以使用HTTP状态代码301,307或308获得响应。然后,您将在响应的Location - 标头中找到真实的URL。实现重定向的另一种方法是通过客户端的Javascript(流行的下载门户,因为它提供了显示更多广告的机会)。这意味着您必须解析内容体并从其源代码中提取真实的URL。