python - 代码在Linux上正常工作但在OSX上崩溃

时间:2013-11-23 01:38:06

标签: python linux macos http ssl

我在OSX Mavericks上运行并安装了python 3.3.3。

Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 16 2013, 23:39:35)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin)

我正在尝试运行此(未完成的)代码(一个简单的HTTPS GET和带有cookie的POST),但它崩溃时出现未知错误:

import urllib.request as rqst
import re
import http.cookiejar

def LoginICorsi():
        loginUrl = "https://www2.icorsi.ch/auth/shibboleth/" 
        rqst.install_opener(rqst.build_opener(rqst.HTTPCookieProcessor(http.cookiejar.CookieJar())))
        pageBytes = rqst.urlopen(loginUrl)

        pageString = pageBytes.read().decode("utf-8")

        action = re.findall(r'action="([^"]*)', pageString)[0]

        loginPostUrl = "https://wayf.switch.ch" + action
        loginPostUrl = loginPostUrl.replace("&", "&")

        print("Posting USI to "+loginPostUrl)
        postDATA = "user_idp=https://login2.usi.ch/idp/shibboleth".encode("utf-8")
        usiLoginRequest = rqst.Request(loginPostUrl)
        usiLoginRequest.add_header("Content-Type", "application/x-www-form-urlencoded")
        usiLoginUrl = rqst.urlopen(usiLoginRequest, data=postDATA)
        usiLoginResult = usiLoginUrl.read().decode("utf-8")
        print(usiLoginResult)

问题是此代码适用于Ubuntu

Python 3.3.3 (default, Nov 20 2013, 00:22:18)
[GCC 4.8.2] on linux

所以我认为代码是正确的。

此外,当我将HTTPS的系统代理设置为使用Fiddler的代理时,代码在我的Mac上运行。

这是追溯pastebin

我错过了什么?这是否与OSX,python,HTTPS服务器或我的mac有关? 当与服务器握手时出现问题,但我不知道为什么它在Linux上运行。

1 个答案:

答案 0 :(得分:0)

强烈建议您从urllib迁移到python请求模块。

说真的,easy_install / pip和移植代码值得花5分钟。它将处理大多数SSL问题更优雅,更少痛苦。