もう少し情報がなければ、直接の質問に答えることは困難です。問題の(Web)サーバーがどのように壊れているかを正確に知らない。
socket
そうは言っても、たとえば、少し低レベルのものを使用してみるとよいでしょう。これが1つの方法です(python2.xスタイル、およびテストされていません):
#!/usr/bin/env python
import socket
from urlparse import urlparse
def geturl(url, timeout=10, receive_buffer=4096):
parsed = urlparse(url)
try:
host, port = parsed.netloc.split(':')
except ValueError:
host, port = parsed.netloc, 80
sock = socket.create_connection((host, port), timeout)
sock.sendall('GET %s HTTP/1.0\n\n' % parsed.path)
response = [sock.recv(receive_buffer)]
while response[-1]:
response.append(sock.recv(receive_buffer))
return ''.join(response)
print geturl('http://www.example.com/') #<- the trailing / is needed if no
other path element is present
そして、これがpython3.2変換のスタブです(たとえば、ファイルに応答を書き込む場合は、バイトからデコードする必要がない場合があります)。
#!/usr/bin/env python
import socket
from urllib.parse import urlparse
ENCODING = 'ascii'
def geturl(url, timeout=10, receive_buffer=4096):
parsed = urlparse(url)
try:
host, port = parsed.netloc.split(':')
except ValueError:
host, port = parsed.netloc, 80
sock = socket.create_connection((host, port), timeout)
method = 'GET %s HTTP/1.0\n\n' % parsed.path
sock.sendall(bytes(method, ENCODING))
response = [sock.recv(receive_buffer)]
while response[-1]:
response.append(sock.recv(receive_buffer))
return ''.join(r.decode(ENCODING) for r in response)
print(geturl('http://www.example.com/'))
HTH!
編集:問題のWebサーバーによっては、リクエストに入力する内容を調整する必要がある場合があります。Guanideneの優れた回答は、その道を案内するためのいくつかのリソースを提供します。