python - 使用 python 套接字连接时服务器的响应为空

标签 python sockets python-requests

我正在尝试使用 Python 连接到 URL https://www.ssehl.co.uk/HALO/publicLogon.do

使用 requests 的简单解决方案失败了:

import requests
r = requests.get('https://www.ssehl.co.uk/HALO/publicLogon.do')
print r.text

有错误

File "c:\Python27\lib\site-packages\requests\adapters.py", line 327, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.ssehl.co.uk', port=443): Max retries exceeded with url: /HALO/publicLogon.do (Caused by <class 'httplib.BadStatusLine'>: '')

所以我尝试使用库 socket 从服务器获取原始响应:

import socket   #for sockets
import sys  #for exit

#create an INET, STREAMing socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()

print 'Socket Created'
host = 'www.ssehl.co.uk';
port = 443;

try:
    remote_ip = socket.gethostbyname(host)

except socket.gaierror:
    #could not resolve
    print 'Hostname could not be resolved. Exiting'
    sys.exit()

#Connect to remote server
s.connect((remote_ip , port))

print 'Socket Connected to ' + host + ' on ip ' + remote_ip

#Send some data to remote server
message = "GET /HALO/publicLogon.do HTTP/1.1\r\n\r\n"

try :
   #Set the whole string
   s.sendall(message)
except socket.error:
   #Send failed
   print 'Send failed'
   sys.exit()

print 'Message send successfully'

#Now receive data
reply = s.recv(4096)

print reply

将输出:

Socket Created
Socket Connected to www.ssehl.co.uk on ip 161.12.7.194
Message send successfully
Reply: 

回复后有一些垃圾我无法粘贴,但这是一个 sublime 控制台截图:

Screenshot

有没有办法像浏览器一样从服务器得到200响应?

最佳答案

出于某种原因,当您在 https 上使用 Python 的内置内容(urllib2、requests、httplib)或什至命令行内容(curl、wget)时,服务器会崩溃并给出错误的响应。

但是,当您通过常规 http 请求页面时,它工作正常,例如:

import urllib2
print urllib2.urlopen('http://www.ssehl.co.uk/HALO/publicLogon.do').getcode()

打印出来

>> 200

我的猜测是他们的服务器配置错误,您的浏览器以某种方式静默处理它。

关于python - 使用 python 套接字连接时服务器的响应为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400174/

相关文章:

java - 套接字在将 json 对象从 Java 传输到 Python 时被阻塞

python - 确定 SSL 包使用的默认协议(protocol)版本?

python - 使用 Python 的列的平均字长

sockets - ip分段有多糟糕

linux - 将命令的输出重定向到 linux 上的套接字

c - 关于 C 中原始套接字的查询很少

python - 使用 Python 请求提取 href URL

python - pygame.transform.flip 不翻转也不给我一个错误?

python - 将自定义日期添加到 Django 中的 DateTimeField?

python - 查找共享共同元素的行