Я получаю сообщение об ошибке при попытке открыть URL-адрес веб-сайта с помощью Python 3.1, urllib & json: была предпринята попытка выполнить операцию на объекте, который не является сокетом - PullRequest
1 голос
/ 05 июня 2010

Я получаю сообщение об ошибке при попытке открыть URL веб-сайта с помощью Python 3.1, urllib & json

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, в урлопене return _opener.open (url, data, timeout)

Файл "c: \ dev \ tdev \ Python31 \ Lib \ urllib \ request.py", строка 349, в открытом виде response = 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)

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

В Vista я только что обновился с Python 3.1.2 до Python 3.2, и это больше не проблема. Следующее теперь работает просто отлично:

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

0 голосов
/ 24 марта 2011

Пожалуйста, измените заголовок, теги и, возможно, даже тело вопроса: Это не имеет никакого отношения к JSON и всему, что связано с Windows. Это также на более низком уровне, чем urllib. (Возможно в коде SSL.) Дистиллировано:

Оба следующих подхода не работают на Python 3.1.2 для Vista, но отлично работают на 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() )
...