【问题标题】:Http Get Request - what data is actually send?Http Get Request - 实际发送什么数据?
【发布时间】:2017-11-14 18:15:29
【问题描述】:

我目前正在使用 java apache commons 构建一个网络蜘蛛。我正在抓取基本的谷歌搜索查询,例如https://google.com/search?q=word&hl=en

不知何故,在大约 60 次查询后我被阻止了,他们似乎将我识别为机器人并且我收到了 503 Service Unavailable 响应

现在是重要的部分: 如果我使用 firefox/chrome 访问同一个站点,我会得到想要的结果。 如果我使用相同的 http 标头(用户代理、cookie、缓存等)向我的应用程序发出 GET 请求,我仍然被阻止。

当只有 IP 和 HTTP 标头作为信息时,Google 如何知道我是通过应用程序连接还是通过 Chrome 浏览器连接?(也许我错了?) 是否有更多参数可以识别我的应用程序?谷歌看到而我没有看到的东西?

(也许很重要:我正在使用 Chrome 开发者工具和 httpbin.org 来比较浏览器和应用程序的标题。)

非常感谢

【问题讨论】:

    标签: java http https web-crawler apache-commons-httpclient


    【解决方案1】:

    由于您没有指定发送 60 个查询的速度,我假设发送速度很高。这就是谷歌阻止你的原因。有几次我从 chrome 快速完成谷歌搜索,它会在一段时间后要求验证码,然后很快就会阻止。

    请参阅自定义搜索 API 和这篇关于服务条款的帖子Replacement for Google API

    关于被阻止搜索的常见问题解答:Google FAQ

    【讨论】:

    • 谢谢,这可能就是我最初被阻止的原因.. 尽管如此,如果我之后从我的应用程序发出单个请求,我仍然会被阻止,而使用浏览器工作正常.. 怎么样google区分这两者?
    • 我应该在单个请求之间等待哪个时间跨度。我提前 5+random(5) 秒尝试过,但还是被阻止了
    • 在答案中添加了一些参考链接
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多