How to connect to a website?

W

webmaster

Hi,
i just try to connect to a website, read that page and display the rules get from it.
Then i get this error message:

File "D:/Python/Py projects/socket test/sockettest.py", line 21, in <module>
fileobj.write("GET "+filename+" HTTP/1.0\n\n")
io.UnsupportedOperation: not writable

My code:

# import sys for handling command line argument
# import socket for network communications
import sys, socket

# hard-wire the port number for safety's sake
# then take the names of the host and file from the command line
port = 80
host = 'www.xxxxxxxx.nl'
filename = 'index.php'

# create a socket object called 'c'
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# connect to the socket
c.connect((host, port))

# create a file-like object to read
fileobj = c.makefile('r', 1024)

# Ask the server for the file
fileobj.write("GET "+filename+" HTTP/1.0\n\n")

# read the lines of the file object into a buffer, buff
buff = fileobj.readlines()

# step through the buffer, printing each line
for line in buff:
print (line)


I started with invent games with python (book 1 & 2)
Now I want to write a multiplayergame, which connects to a website, where all players and gamedata will be stored/controlled.
Players need to subscribe and to login via the game software. (executable, made from python script)
Sending gamedata preferable in JSON, because of low traffic resources then.
No idea about how authentication proces should be done....

I made many searches with Google, but got confused about my first steps.
I am new to python, but code for many years in php/mysql. Spent most time in an online chessgame project.
 
J

John Gordon

In said:
Hi,
i just try to connect to a website, read that page and display the rules get from it.
Then i get this error message:
File "D:/Python/Py projects/socket test/sockettest.py", line 21, in <module>
fileobj.write("GET "+filename+" HTTP/1.0\n\n")
io.UnsupportedOperation: not writable

I haven't worked with the socket library, but I think this error is because
you specified a mode of 'r' when calling makefile(). fileobj is read-only,
and you're trying to write to it.

If you just want to connect to a website, try using the urllib2 module
instead of socket. It's higher-level and handles a lot of details for
you. Here's an example:

import urllib2

request = urllib2.Request('http://www.voidspace.org.uk')
response = urllib2.urlopen(request)
content = response.readlines()
 
M

MRAB

Hi,
i just try to connect to a website, read that page and display the rules get from it.
Then i get this error message:

File "D:/Python/Py projects/socket test/sockettest.py", line 21, in <module>
fileobj.write("GET "+filename+" HTTP/1.0\n\n")
io.UnsupportedOperation: not writable

My code:

# import sys for handling command line argument
# import socket for network communications
import sys, socket

# hard-wire the port number for safety's sake
# then take the names of the host and file from the command line
port = 80
host = 'www.xxxxxxxx.nl'
filename = 'index.php'

# create a socket object called 'c'
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# connect to the socket
c.connect((host, port))

# create a file-like object to read
fileobj = c.makefile('r', 1024)

You're creating a file-like object for reading...
# Ask the server for the file
fileobj.write("GET "+filename+" HTTP/1.0\n\n")
....and then trying to write to it.
# read the lines of the file object into a buffer, buff
buff = fileobj.readlines()

# step through the buffer, printing each line
for line in buff:
print (line)
[snip]
 
W

webmaster

thanks!
solved with:

import urllib.request
import urllib.parse

user = 'user'
pw = 'password'

login_url = 'http://www.riskopoly.nl/test/index.php'

data = urllib.parse.urlencode({'user': user, 'pw': pw})
data = data.encode('utf-8')
# adding charset parameter to the Content-Type header.
request = urllib.request.Request(login_url)
request.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8")

f = urllib.request.urlopen(request, data)
print(f.read().decode('utf-8'))

And then i get next answer:
<pre>Array
(
[pw] => password
[user] => user
)
</pre>

Solved and thanks again:)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,740
Latest member
AdolphBig6

Latest Threads

Top