gpt4 book ai didi

java - 如何查看并记录URL重定向?

转载 作者:行者123 更新时间:2023-12-01 10:14:56 27 4
gpt4 key购买 nike

我现在正在写一些网络蜘蛛。我想从网络上抓取一堆页面。我已经成功实现了部分目标,我手上存储了数百个 URL 链接。但这些链接并不是最终链接。这意味着,当您在 Google Chrome 等网络浏览器中输入 URL 时,该 URL 会自动重定向到另一个页面,这正是我想要的。但这仅适用于网络浏览器。当我编写代码从该 URL 抓取时,不会发生重定向。

一些例子:

给定 (URL_1):

 http://weixin.sogou.com/websearch/art.jsp?sg=CBf80b2xkgZ8cxz1-SgG-dBH_4QL8uVunUQKxf0syVWvynE5nPZm2TPqNuEF6MO2xv0MclVANfsVYUGr5-1b3ls29YYxgU27ra8qaaU15iv7KVkBsZp5Td27Cb2A24cIwEuw__0ZHdPeivmW-kcfnw..&url=p0OVDH8R4SHyUySb8E88hkJm8GF_McJfBfynRTbN8wjVuWMLA31KxFCrZAW0lIGG1EpZGR0F1jdIzWnvINEMaGQ3JxMQ33742MRcPWmNX2CMTFYIzOo-v8LrDlfP2AnF54peD-GxvCNYy-5x5In7jJFmExjqCxhpkyjFvwP6PuGcQ64lGQ2ZDMuqxplQrsbk

将此链接放入浏览器中,它会自动重定向到 (URL_2):

http://mp.weixin.qq.com/s?__biz=MzA4OTIxOTA4Nw==&mid=404672464&idx=1&sn=bdfff50b8e9ac28739cf8f8a51976b03&3rd=MzA3MDU4NTYzMw==&scene=6#rd

这是一个不同的链接。

但是将其放入Python代码中,例如:

response=urllib2.urlopen(URL_1)
print response.read()

自动重定向不会发生!

总而言之,我的问题是:给定一个 URL,如何获取重定向的 URL?

有些人给了我一些 java 代码,这些代码在其他情况下可以工作,但在我的情况下没有帮助:

import java.net.HttpURLConnection;
import java.net.URL;

public class Main {
public void test()throws Exception {
String expectedURL ="http://www.zhihu.com/question/20583607/answer/16597802";
String url = "http://www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK";
String redirtURL = getRedirectURL(url);

if (redirtURL.equals(expectedURL)) {
System.out.println("Equal");
}else{
System.out.println(url);
System.out.println(redirtURL);
}
}

public String getRedirectURL(String path) throws Exception {
HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
conn.setInstanceFollowRedirects(false);
conn.setConnectTimeout(5000);
return conn.getHeaderField("Location");
}

public static void main(String[] args) throws Exception{
Main obj = new Main();
obj.test();
}
}

在这种情况下,它会打印出Equal,这意味着我们现在可以从url获取expecteURL。但这适用于前一种情况。(我不知道为什么,但仔细查看上面的 URL_1 和 java 代码中的 url ,我注意到有一些有趣的区别:上面的 java 代码中的 url 中有一个片段 .../link?url=... ,这可能意味着一些 方向。但在上面的URL_1中,它是.../art.jsp?sg=... )

最佳答案

查找follow_redirects选项。在Python中,你可以这样做,例如与请求

import requests

response = requests.get('http://example.com', follow_redirects=True)
print response.url

# history contains list of responses for redirects
print response.history

关于java - 如何查看并记录URL重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com