Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字数据返回<;字节>;对象如何注册它?_Python_Proxy_Sockets_Http Headers_Python 3.x - Fatal编程技术网

Python套接字数据返回<;字节>;对象如何注册它?

Python套接字数据返回<;字节>;对象如何注册它?,python,proxy,sockets,http-headers,python-3.x,Python,Proxy,Sockets,Http Headers,Python 3.x,我正在用python(3)编写一个基本的html代理,到目前为止,我没有使用像http.server这样的预构建类 我刚刚启动一个接受连接的套接字: self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.listen_socket.bind((socket.gethostname(), 4321)) self.listen_socket.listen(5) (a, b) = self.listen_

我正在用python(3)编写一个基本的html代理,到目前为止,我没有使用像http.server这样的预构建类

我刚刚启动一个接受连接的套接字:

self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.listen_socket.bind((socket.gethostname(), 4321))
self.listen_socket.listen(5)
(a, b) = self.listen_socket.accept()
content = a.recv(100000)
现在,内容存储数据,如:

b'GET http://www.google.com/firefox HTTP/1.1\r\nHost: www.google.com\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100207 Namoroka/3.6\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-us,en;q=0.5\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 115\r\nProxy-Connection: keep-alive\r\nCookie: PREF=ID=1ac935f4d893f655:U=73a4849dc5fc23a4:TM=1266851688:LM=1267023171:S=Log1PmXRMlNjX3Of; NID=32=EnrZjTqILuW2_aMLtgsJ96FdEMF3s5FoMJSVq9GMr9dhLhTAd3F5RcQ3ImyVBiO2eYNKKMhzlGg7r8zXmeSq50EigS5sdKtCL9BMHpgCxZazA2NiyB0bTRWhp8-0BObn\r\n\r\n'
我怎样才能注册它?转换为字符串对我不起作用

或者,最终,我需要找到被查询的地址,比如
http://www.google.com/firefox
在这种情况下。有我不知道的解析器吗?我怎样才能达到这个结果


提前感谢。

在转换为字符串时,您需要包括编码,例如使用:

>>> str(b'GET http://...', 'UTF-8')
'GET http://...'
如果您不使用编码,那么正如您所发现的,您会得到一些不太有用的东西:

>>> str(b'GET http://...')
"b'GET http://...'"

另外,您可能需要检查
*HTTPServer
类。它们为HTTP服务器提供了一个包装器,还将为您解析头文件


如果你不能,那么,至少他们会提供如何做的源代码示例

提供了在字节和字符串之间转换的方法。请尝试str.encode()和bytes.decode()


为什么str(b)不适合你?错误消息是什么?没有错误消息,但正如Scott Griffiths指出的,它返回“b'GET”http://...“这对我的需要是没有用的。这似乎有效。我可以为HTTP请求假设“UTF-8”默认编码吗?我不认为你可以假设UTF-8,我认为它可以指示其他字符集(虽然我不是HTTP专家)。根据标准,HTTP头中的任何非ASCII字符都是ISO-8859-1。实际上,浏览器是不同的。Firefox使用UTF-16代码单元的低字节,Opera和Chrome使用UTF-8,Safari通常会中断,IE将使用安装它的机器的系统默认代码页(永远不会是UTF-8)。总之,标题中未编码的非ASCII字符是完全不可靠的。也许你不在乎,你可以选择ISO-8859-1。是的,我注意到了,我有一些计划在将来使用它,但现在我不需要它。