【问题标题】:Why python requests get a 404 error?为什么python请求会出现404错误?
【发布时间】:2016-01-25 20:38:03
【问题描述】:

我尝试使用 requests 库从 URL 获取内容。更详细地说,我按以下方式进行:

import requests

proxies = {'http':'my_proxy.blabla.com/'}
r = requests.get(url, proxies = proxies)
print r.text

结果我得到以下信息:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

所以,看起来代理让我走了,我到达了服务器。但是,Web 服务器无法解释我的请求(路径错误左右)并且不知道要返回什么内容。我的解释正确吗?

这可能是什么原因?如果我将 URL 放在我的浏览器之一中,我确实会得到预期的内容。

添加

在 cmets 中已建议问题的根源在于标头。因此,我使用了这个网站:http://www.procato.com/my+headers/ 来了解我的浏览器发送了哪些标头。我使用这些值来设置给requests.get 函数的headers 变量。我为以下键设置了值:'User-Agent'、'Accept'、'Referer'、'Accept-Encoding'、'Accept-Language'、'X-Forwarded-For'、'Cache-Control'、'联系'。不幸的是,它不能解决问题。我仍然收到相同的 404 响应。

增加了 2 个

我已经针对两个不同的 URL 测试了我的函数并得到了完全相同的响应。所以,我之前关于响应(我看到的 XML)来自网络服务器的假设可能是错误的。两个完全不同的网络服务器(其中一个是 Google)不太可能生成相同的响应。

所以,现在我不明白 XML 的来源。会不会是来自代理服务器?

【问题讨论】:

  • 如果服务器不喜欢“用户代理”标识,它可以拒绝传递内容。在这种情况下响应 404 错误并不好,但可能是为了欺骗搜索引擎,或者服务器希望机器人对站点有完全不同的想法,因此出现 404。
  • 我能否以某种方式设置“用户代理”,以便来自 Python 的请求看起来与来自 Firefox 或 Chromium 的请求相同。我之所以问,是因为 Web 服务器接受了来自浏览器的请求,并且它提供了一些内容。换句话说,Python 可以伪装成浏览器吗?我想我需要类似:headers={'User-Agent': 'firefox'}
  • 类似的东西。但是琴弦有点长。请使用您最喜欢的搜索引擎和/或 Python 文档;你会很容易找到答案。

标签: python http-status-code-404 python-requests


【解决方案1】:
import requests
URL = 'https://www.blahblah.com'
proxy = {'http': 'http://www.blahblah.com'}
r = requests.get(URL, proxies = proxy)
print r.text

【讨论】:

  • 对不起,我没有给你解决方案。它与我所做的有什么不同?您是否建议对 URL 和代理使用相同的地址?
  • 您在代理字典中写入的 URL 不完整。
  • 你的意思是代理网址前面少了http://?我厌倦了将http:// 放在代理 URL 前面,它不会改变任何东西。我认为没有必要,因为我们已经将 http 作为 key。
  • 我已经在 google.com 上测试过了,效果很好!
  • 我也为 Google 尝试过,我得到了与以前完全相同的 XML(带有 404 错误)。所以,现在我认为 XML 不是来自 Web 服务器,而是来自我的代理服务器。所以,我使用了代理服务器的正确 URL(这就是为什么我能够与它交谈并从中获取一些东西)但它可能需要更多(可能是用户名和密码)。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2020-02-26
  • 1970-01-01
  • 2015-06-01
  • 2013-02-15
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
相关资源
最近更新 更多