当我运行以下代码时
import socket
import urlparse
import re
import os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect(("www.google.co.in", 80))
s.send("GET /?gfe_rd=cr&gws_rd=cr HTTP/1.0\r\n\r\n")
data = s.recv(100000)
print data
s.close()
我从谷歌获得的回复始终如下
HTTP/1.0 302 Found
Location: http://www.google.co.in/?gfe_rd=cr&gws_rd=cr
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
Date: Mon, 04 Jan 2016 04:30:53 GMT
Server: gws
Content-Length: 245
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=75=chG9KySsUncl-1elqXhs56m7cNHxFvFwNR5pZoavIwRJ2PpoGlm5RbShdsiF7udrTgwZgG-eRo4oQqA0RhbfwtExcxUGk88F_R2TNV9vi4XKhWSB9ihhcqulYTtg9xGkagSDPdFfmw; expires=Tue, 05-Jul-2016 04:30:53 GMT; path=/; domain=.google.com; HttpOnly
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.in/?gfe_rd=cr&gws_rd=cr">here</A>.
</BODY></HTML>
我理解这是因为我没有遵循重定向。有人可以解释我应该连接哪个网址,以便我不会收到此错误,或者我该如何解决此问题?
答案 0 :(得分:1)
您收到的是302 Found
,而不是Not Found
。
302
响应代码的含义是重定向,浏览器会默默/自动执行此操作,并加载新的重定向页面。
正如您在回复正文中所看到的那样
The document has moved
<A HREF="http://www.google.co.in/?gfe_rd=cr&gws_rd=cr">here</A>.
将您的请求指向此网址,您不应再收到302
回复,请确保将&
替换为&
:
s.send("GET /?gfe_rd=cr&gws_rd=cr HTTP/1.0\r\n\r\n")
请查看this link以自动浏览这些网址,这样您就不需要手动执行此操作。
例如,在Python 3.5中:
import html
html.unescape('/?gfe_rd=cr&gws_rd=cr') # /?gfe_rd=cr&gws_rd=cr