为什么python请求会出现404错误?

为什么python请求会出现404错误?,python,http-status-code-404,python-requests,Python,Http Status Code 404,Python 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

我尝试使用
请求
库从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>

404-找不到
404-找不到
看来代理让我走了,我到达了服务器。但是,web服务器无法解释我的请求(路径错误等),并且不知道返回什么内容。我的解释正确吗

原因是什么?如果我把URL放在我的浏览器中,我会得到预期的内容

已添加

评论中建议,问题的根源在于标题。因此,我使用了这个网站:找出我的浏览器发送的标题。我使用这些值来设置
headers
变量,该变量提供给
requests.get
函数。我为以下键设置了值:“用户代理”、“接受”、“引用”、“接受编码”、“接受语言”、“X-Forwarded-for”、“缓存控制”、“连接”。不幸的是,这并不能解决问题。我仍然得到相同的404响应

增加了2个

我测试了两个不同URL的函数,得到了完全相同的响应。因此,我之前的假设(我看到的XML)来自web服务器可能是错误的。两个完全不同的web服务器(其中一个是Google)不太可能生成相同的响应


所以,现在我不明白XML从何而来。是否可能是来自代理服务器?

如果服务器不喜欢“用户代理”标识,则可能拒绝交付内容。在这种情况下,用404错误来回应是不好的,但可能目的是愚弄搜索引擎,或者服务器希望机器人对站点有一个完全不同的想法,因此是404。我是否可以设置“用户代理”,使来自Python的请求看起来与来自Firefox或Chromium的请求相同。我这样问是因为web服务器接受来自浏览器的请求,并提供一些内容。换句话说,Python可以假装成浏览器吗?我想我需要类似这样的东西:
headers={'User-Agent':'firefox'}
headers={'User-Agent':'firefox'}。但是字符串有点长。请使用您喜爱的搜索引擎和/或Python文档;你会很容易找到答案的。对不起,我没有给你答案。这和我现在做的有什么不同?您建议URL和代理使用相同的地址吗?您在代理字典中写入了不完整的URL。您的意思是代理URL前面缺少
http://
?我尝试将
http://
放在代理URL前面,它不会改变任何东西。我认为这是没有必要的,因为我们已经
http
作为密钥。我已经用google.com测试过了,效果很好!我也在Google上试用过,得到的XML和以前完全一样(404错误)。因此,现在我认为XML不是来自web服务器,而是来自我的代理服务器。所以,我使用了代理服务器的正确URL(这就是为什么我能够和它对话并从中获取一些信息),但它可能需要更多(可能是用户名和密码)。
import requests
URL = 'https://www.blahblah.com'
proxy = {'http': 'http://www.blahblah.com'}
r = requests.get(URL, proxies = proxy)
print r.text