擅长:python、mysql、java
<p>扩展glglglglgl的答案:你的问题在于破坏协议。在</p>
<p>HTTP协议指定:</p>
<ul>
<li>用户请求<code>GET /magicFM ...</code></li>
<li>使用元数据<code>200 OK ...</code>的服务器响应</li>
<li>服务器持续响应实际数据</li>
</ul>
<p>查看更多详细信息:<a href="http://en.wikipedia.org/wiki/HTTP" rel="nofollow">http://en.wikipedia.org/wiki/HTTP</a></p>
<p><code>urllib2.urlopen</code>隐藏了所有这些复杂性,使其看起来像读取文件一样简单,尽管您的客户机希望代理的行为与普通的http服务器一样。这里{<cd4>}对你来说是一个错误的抽象。最好的策略是打开服务器的套接字并启动两个并行循环:</p>
<ul>
<li>从客户端读取,写入服务器</li>
<li>从服务器读取,写入客户端</li>
</ul>
<p>(或者在一个循环中执行非阻塞读取;或者执行asyncio)</p>
<p>可能会有一个复杂的问题:http协议指定“Host”头,您的客户端将在请求中将代理地址作为值发送给代理,这取决于您的无线服务器的行为,您可能需要将客户端请求中的“Host:…”重写为正确的地址(尽管在现代Internet中,这通常并不重要)。在</p>
<p>您将注意到的另一个有趣的副作用是:代理将不包含任何有关要打开的特定URL的信息,因为您的媒体客户端将为您提供这些信息。在</p>