代码之家  ›  专栏  ›  技术社区  ›  ChrisJF

Django请求包含SSL IO错误的XML文件

  •  0
  • ChrisJF  · 技术社区  · 16 年前

    https://adminuser:password@url.to.database.com/database.getdata?arg=1&arg2=0

    因此,在python views.py中,我有:

    def fetch_xml(url):
      import urllib
      import xml.etree.cElementTree as xml_parser
    
      u = urllib.URLopener(None)
      usock = u.open(url)
      rawdata = usock.read()
      usock.close()
      return xml_parser.fromstring(rawdata)
    

    http://www.webmonkey.com/2010/02/integrate_web_apis_into_your_django_site/

    但是,我在线路上收到了以下错误 usock = u.open(url)

    IOError at /webapp/
    
    [Errno socket error] [Errno 1] _ssl.c:480: error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac
    

    urllib 如果无法建立连接,则抛出IOError的文档。 http://docs.python.org/library/urllib.html 此外,在维基百科上,“坏记录MAC”致命警报意味着“可能是一个坏的SSL实现,或者负载被篡改。例如,FTPS服务器上的FTP防火墙规则。”

    但我不明白的是,当我将URL粘贴到浏览器中时,它工作正常,并会输出一个XML文件。

    apachectl -t -D DUMP_MODULES 并作为共享加载。

    1 回复  |  直到 16 年前
        1
  •  1
  •   ChrisJF    16 年前

    我的同事让API在PHP中工作,所以我看了他的代码,他正在使用 cURL . 我发现有一个python版本叫做 PycURL . 安装完PycURL后,我把 urllib 编码并使用PycURL代替。

    import pycurl
    
    c = pycurl.Curl()
    c.setopt(pycurl.URL, authenticate_url)
    c.setopt(pycurl.SSLVERSION, 3)
    c.setopt(pycurl.SSL_VERIFYPEER, False)
    c.setopt(pycurl.SSL_VERIFYHOST, 2)
    c.setopt(pycurl.USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)')
    
    outputXML = c.perform()
    c.close()
    

    我猜 URL库 没有PycURL那么健壮。