2

尝试使用 Python 3.1、urllib 和 json 打开网站 url 时出现错误

urllib.error.URLError:

这是代码。第一个网站加载正常。第二个

import json
import urllib.request
import urllib.parse
import util

# This one works fine
response = urllib.request.urlopen('http://python.org/')
html = response.read()
print(html)

# parms - CSV filename, company, ....

p_filename = "c:\\temp\\test.csv"

jg_token = "zzzzzzzzzzzzzzzzzzzzzzzzz"
jg_proto = "https://"
jg_webst = "www.jigsaw.com/rest/"

jg_cmd_searchContact = "searchContact.json"

jg_key_companyName = "companyName"
jg_key_levels      = "levels"
jg_key_departments = "departments"

jg_args = {
        "token":jg_token,
        jg_key_companyName: "Technical Innovations",
        jg_key_departments: "HR"
        }

jg_url = jg_proto + jg_webst + jg_cmd_searchContact + "?" + urllib.parse.urlencode(jg_args)

    # This one generates teh error
result = json.load(urllib.request.urlopen(jg_url))

urllib.error.URLError:

文件“c:\dev\xdev\PyJigsaw\searchContact.py”,第 46 行,结果 = json.load(urllib.request.urlopen(jg_url))

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 121 行,在 urlopen 返回 _opener.open(url, data, timeout)

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 349 行,打开响应 = self._open(req, data)

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 367 行,在 _open '_open',req)

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 327 行,在 _call_chain 结果 = func(*args)

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 1098 行,在 https_open 返回 self.do_open(http.client.HTTPSConnection, req)

文件“c:\dev\tdev\Python31\Lib\urllib\request.py”,第 1075 行,在 do_open 中引发 URLError(err)

4

2 回答 2

1

请编辑标题和标签,甚至可能是问题正文:这与 JSON 无关,与 Windows 无关。它的级别也低于 urllib。(可能在 SSL 代码中。)蒸馏:

以下两种方法在适用于 Vista 的 Python 3.1.2 上均失败,但在 Linux (Python 3.1.3) 上工作正常

print( HTTPSConnection(hostname).request('GET',url).getresponse().read() )
print( urllib.request.urlopen('https://'+hostname+url).read() )

将它们更改为不使用 SSL,然后它们可以在 Windows 上正常工作:

print( HTTPConnection(hostname).request('GET',url).getresponse().read() )
print( urllib.request.urlopen('http://'+hostname+url).read() )
于 2011-03-24T16:28:43.770 回答
1

在 Vista 上,我刚刚从 Python 3.1.2 升级到 Python 3.2,这不再是问题。以下现在可以正常工作:

print( urllib.request.urlopen('https://'+hostname+url).read() )

于 2011-03-24T17:23:57.123 回答