在 python 中使用套接字进行 HTTP 基本身份验证

发布于 2024-09-03 11:46:46 字数 91 浏览 3 评论 0原文

如何通过 python 中的套接字使用基本的 http 身份验证连接到服务器。我不想使用 urllib/urllib2 等,因为我的程序执行一些低级套接字 I/O 操作

How to connect to a server using basic http auth thru sockets in python .I don't want to use urllib/urllib2 etc as my program does some low level socket I/O operations

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自找没趣 2024-09-10 11:46:46

最简单的开始可能是使用 makefile() 来获得一个更简单的类似于文件的套接字接口。

import socket, base64

host= 'www.example.com'
path= '/'
username= 'fred'
password= 'bloggs'
token= base64.encodestring('%s:%s' % (username, password)).strip()

lines= [
    'GET %s HTTP/1.1' % path,
    'Host: %s' % host,
    'Authorization: Basic %s' % token,
    'Connection: close',
]

s= socket.socket()
s.connect((host, 80))
f= s.makefile('rwb', bufsize=0)
f.write('\r\n'.join(lines)+'\r\n\r\n')
response= f.read()
f.close()
s.close()

如果您需要解释返回的响应以挑选出 HTML 或需要身份验证的标头,并处理重定向、错误、传输编码等,那么您将需要做更多的工作。 HTTP 可能很复杂!您确定需要使用低级套接字吗?

Probably the easiest place to start is using makefile() to get a simpler file-like interface to the socket.

import socket, base64

host= 'www.example.com'
path= '/'
username= 'fred'
password= 'bloggs'
token= base64.encodestring('%s:%s' % (username, password)).strip()

lines= [
    'GET %s HTTP/1.1' % path,
    'Host: %s' % host,
    'Authorization: Basic %s' % token,
    'Connection: close',
]

s= socket.socket()
s.connect((host, 80))
f= s.makefile('rwb', bufsize=0)
f.write('\r\n'.join(lines)+'\r\n\r\n')
response= f.read()
f.close()
s.close()

You'll have to do a lot more work than that if you need to interpret the returned response to pick out the HTML or auth-required headers, and handle redirects, errors, transfer-encoding and all that right. HTTP can be complex! Are you sure you need to use a low-level socket?

亚希 2024-09-10 11:46:46

例如查看 urllib 的 来源,特别是 http_error_401 函数(当然还有围绕它的调度):发出 HTTP 请求,监视 401 响应,提取其领域,检查其方案是否为 basic,使用该领域的用户和密码重试(参见同一源文件中的函数retry_http_basic_auth)。当然有很多工作,但这就是根据您的需要进行“裸机”编程的代价。

Look e.g. at urllib's sources, specifically the http_error_401 function (and the dispatching around it of course): make the HTTP request, watch for a 401 response, extract its realm, check that its scheme is basic, try again with the user and password for that realm (cfr function retry_http_basic_auth in that same source file). Lots of work of course, but that's the price of programming "down to the bare metal" as you require.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文