This is a bug. It has never worked—although it would be great if it did. As noted in socket.__doc__, socket.makefile() (which urllib.urlopen() depends on) is not implemented. We’re aware of the problem, and I’ve filed a bug at http://www.codeplex.com/WorkItem/View.aspx?ProjectName=IronPython&WorkItemId=1368 to track it.

 

Here’s the long technical explanation why makefile() is missing: CPython actually implements the socket module in two parts: _socket.pyd (the main implementation written in C) and socket.py (a thin wrapper written in Python). We originally planned to implement only the _socket module (in C#) and have people use it with the standard socket.py module. However, we discovered that socket.py depends on CPython’s refcounting garbage collector work correctly, and so we had to modify our socket module to work without socket.py. Unfortunately, makefile() is one of the things that socket.py provides, and we haven’t had time yet to implement it.

 

--Bruce

 

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mike Raath
Sent: Wednesday, July 26, 2006 12:53 AM
To: Discussion of IronPython
Subject: [IronPython] Bug in urllib?

 

I'm getting an error trying to use urllib - AttributeError: 'socket' object has no attribute 'makefile' Using 1.0 RC1. Not sure if this has ever worked - get NotImplementedError: getaddrinfo() is not currently implemented in the Beta 9.

>>> import sys
>>> sys.path.append("C:\\Python24\\Lib")
>>> import urllib
>>> f = urllib.urlopen("http://www.microsoft.com ")
Traceback (most recent call last):
  File , line 0, in <stdin>##151
  File C:\Python24\Lib\urllib.py, line 82, in urlopen
  File C:\Python24\Lib\urllib.py, line 194, in open
  File C:\Python24\Lib\urllib.py, line 316, in open_http
  File C:\Python24\Lib\httplib.py, line 1150, in getreply
  File C:\Python24\Lib\httplib.py, line 863, in getresponse
  File C:\Python24\Lib\httplib.py, line 275, in __init__
AttributeError: 'socket' object has no attribute 'makefile'

Same on CPython 2.4 gives:
>>> import sys
>>> sys.path.append("C:\\Python24\\Lib")
>>> import urllib
>>> f = urllib.urlopen(" http://www.microsoft.com")
>>> print f.read()
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<html dir="ltr" lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8" >
<!--TOOLBAR_EXEMPT-->
(etc.....)

_______________________________________________
users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to