Python 2.7 Python中的urllib调用有问题。获取服务器错误

Python 2.7 Python中的urllib调用有问题。获取服务器错误,python-2.7,urllib,Python 2.7,Urllib,我试图从欧盟统计局网站下载一个XML文件,但在Python中使用urllib时遇到了问题。不知何故,当我使用我的常规Chrome浏览器时,它能够发出HTTP请求,网站将生成一个XML文件,但是当我尝试用python做同样的事情时,我得到了一个服务器错误。这是我正在使用的代码: import urllib from xml.etree import ElementTree as ET response = urllib.urlopen("http://ec.europa.eu/eurostat/S

我试图从欧盟统计局网站下载一个XML文件,但在Python中使用urllib时遇到了问题。不知何故,当我使用我的常规Chrome浏览器时,它能够发出HTTP请求,网站将生成一个XML文件,但是当我尝试用python做同样的事情时,我得到了一个服务器错误。这是我正在使用的代码:

import urllib
from xml.etree import ElementTree as ET
response = urllib.urlopen("http://ec.europa.eu/eurostat/SDMX/diss-web/rest/data/lfsq_egais/Q.T.Y_GE15.EMP..NL")
result = response.read()
print result
我也尝试过使用urllib.urlretrieve,但也没有成功。为什么会发生这种情况?我得到的HTML如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
<TITLE>Error 500--Internal Server Error</TITLE>
<META NAME="GENERATOR" CONTENT="WebLogic Server">
</HEAD>
<BODY bgcolor="white">
<FONT FACE=Helvetica><BR CLEAR=all>
<TABLE border=0 cellspacing=5><TR><TD><BR CLEAR=all>
<FONT FACE="Helvetica" COLOR="black" SIZE="3"><H2>Error 500--Internal Server Error</H2>
</FONT></TD></TR>
</TABLE>
<TABLE border=0 width=100% cellpadding=10><TR><TD VALIGN=top WIDTH=100% BGCOLOR=white><FONT FACE="Courier New"><FONT FACE="Helvetica" SIZE="3"><H3>From RFC 2068 <i>Hypertext Transfer Protocol -- HTTP/1.1</i>:</H3>
</FONT><FONT FACE="Helvetica" SIZE="3"><H4>10.5.1 500 Internal Server Error</H4>
</FONT><P><FONT FACE="Courier New">The server encountered an unexpected condition which prevented it from fulfilling the request.</FONT></P>
</FONT></TD></TR>
</TABLE>

</BODY>
</HTML>

错误500--内部服务器错误


错误500--内部服务器错误 来自RFC 2068超文本传输协议——HTTP/1.1: 10.5.1 500内部服务器错误

服务器遇到意外情况,无法满足请求。


这个问题已经提了几个月了,但迟提总比不提好:

您正在谈论的欧盟统计局RESTAPI应该使用XML内容进行响应,而urllib在默认情况下不期望/允许XML内容。解决方案是向请求添加标题
Accept:application/xml

这将在Python 2.7中实现这一点(顺便说一下,使用
urllib2
):


有关更多信息和示例,请参阅。

尝试捕获异常,类似于。代码运行正常,问题是服务器没有使用我想要的XML文件(使用Chrome时得到的)响应urllib。相反,我得到了一个HTML文档,详细说明了服务器错误(“服务器遇到了一个意外情况,使其无法满足请求。”)@joseph-您的代码没有问题。这是服务器的问题。服务器可能需要一些参数或cookie,并抛出500而不是返回更有意义的错误页面。这里有一个建议。尝试检查chrome和服务器之间的会话,看看它正在发送哪些python代码没有发送的内容。@joseph-我刚刚检查过,但使用刚才粘贴的URL返回一条xml错误消息,上面写着
“调用方由于不正确或语义无效的参数而导致的错误”
@alvits现在可以修复了。
import urllib2
req = urllib2.Request("http://ec.europa.eu/eurostat/SDMX/diss-web/rest/data/"
    "lfsq_egais/Q.T.Y_GE15.EMP..NL")
req.add_header("Accept", "application/xml")
response = urllib2.urlopen(req)
print response.read()