Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets - Fatal编程技术网

Python-使用套接字获取源代码

Python-使用套接字获取源代码,python,sockets,Python,Sockets,我想发送http get请求并从网页接收源代码,这必须通过套接字完成。我将缓冲区大小设置为4096,但我的脚本只下载页面中的一小部分 import socket sock = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) sock.connect ( ( "edition.cnn.com", 80 ) ) host = socket.gethostbyname("edition.cnn.com") sock.sendall('GET

我想发送http get请求并从网页接收源代码,这必须通过套接字完成。我将缓冲区大小设置为4096,但我的脚本只下载页面中的一小部分

import socket
sock = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
sock.connect ( ( "edition.cnn.com", 80 ) )

host = socket.gethostbyname("edition.cnn.com")
sock.sendall('GET http://edition.cnn.com/index.html HTTP/1.1\r\n'\
    + 'User-Agent: agent123\r\n'\
    + 'Host: '+host+'\r\n'\
    + '\r\n')

print sock.recv(4096)
sock.close()
运行此代码后,我得到的数据是

HTTP/1.1 200 OK

Server: nginx

Date: Wed, 01 Jan 2014 18:31:25 GMT

Content-Type: text/html

Transfer-Encoding: chunked

Connection: keep-alive

Set-Cookie: CG=GR:44:Réthimnon; path=/

Last-Modified: Wed, 01 Jan 2014 18:31:22 GMT

Vary: Accept-Encoding

Cache-Control: max-age=60, private

Expires: Wed, 01 Jan 2014 18:32:25 GMT



ac2a


<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CNN.com International - Breaking, World, Business, Sports, Entertainment and Video News</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta http-equiv="last-modified" content="2014-01-01T18:28:34Z"/>
<meta http-equiv="refresh" content="1800;url=http://edition.cnn.com/?refresh=1"/>
<meta name="robots" content="index,follow"/>
<meta name="googlebot" content="noarchive"/>
<meta name="description" content="CNN.com International delivers breaking news from across the globe and information on the latest top stories, business, sports and entertainment headlines. Follow the news as it happens through: special reports, videos, audio, photo galleries plus interactive maps and timelines."/>
<meta name="keywords" content="CNN, CNN news, CNN International, CNN International news, CNN Edition, Edition news, news, news online, breaking news, U.S. news, world news, global news, weather, business, CNN Money, sports, politics, law, technology, entertainment, education,
我得到了这样的回应

HTTP/1.1 301 Moved Permanently

Location: http://www.google.com/index.html

Content-Type: text/html; charset=UTF-8

Date: Wed, 01 Jan 2014 18:38:57 GMT

Expires: Fri, 31 Jan 2014 18:38:57 GMT

Cache-Control: public, max-age=2592000

Server: gws

Content-Length: 229

X-XSS-Protection: 1; mode=block

X-Frame-Options: SAMEORIGIN

Alternate-Protocol: 80:quic



<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/index.html">here</A>.

</BODY></HTML>
HTTP/1.1 301永久移动
地点:http://www.google.com/index.html
内容类型:text/html;字符集=UTF-8
日期:2014年1月1日星期三18:38:57 GMT
到期时间:2014年1月31日星期五18:38:57 GMT
缓存控制:公共,最大年龄=2592000
服务器:gws
内容长度:229
X-XSS-Protection:1;模式=块
X-Frame-Options:SAMEORIGIN
备选议定书:80:quic
301移动
301移动
文档已移动
.
这表示页面被移动到我想要下载的相同地址…

sock.recv(4096)
将读取最多4096字节的;这取决于已经到达的数据量以及调用实际可以返回的数据量。不能保证4096字节实际上可以一次性读取

在收到所有数据之前,您必须继续从套接字读取:

data = ''
chunk = sock.recv(4096)
while chunk:
    data += chunk
    if len(data) >= 4096:
        break
    chunk = sock.recv(4096)
您对
http://google.com/index.html
重定向到
www.google.com
,一个不同的主机名。相应地调整您的请求

如果你想实现一个完整的HTTP客户端,你必须解析状态行,通过解析
位置:
头来处理
301
重定向响应,并建立一个新连接来请求提供给你的新URL。

sock.recv(4096)
将读取最多4096字节;这取决于已经到达的数据量以及调用实际可以返回的数据量。不能保证4096字节实际上可以一次性读取

在收到所有数据之前,您必须继续从套接字读取:

data = ''
chunk = sock.recv(4096)
while chunk:
    data += chunk
    if len(data) >= 4096:
        break
    chunk = sock.recv(4096)
您对
http://google.com/index.html
重定向到
www.google.com
,一个不同的主机名。相应地调整您的请求

如果你想实现一个完整的HTTP客户端,你必须解析状态行,通过解析
位置:
头来处理
301
重定向响应,并建立一个新连接来请求提供给你的新URL。

sock.recv(4096)
将读取最多4096字节;这取决于已经到达的数据量以及调用实际可以返回的数据量。不能保证4096字节实际上可以一次性读取

在收到所有数据之前,您必须继续从套接字读取:

data = ''
chunk = sock.recv(4096)
while chunk:
    data += chunk
    if len(data) >= 4096:
        break
    chunk = sock.recv(4096)
您对
http://google.com/index.html
重定向到
www.google.com
,一个不同的主机名。相应地调整您的请求

如果你想实现一个完整的HTTP客户端,你必须解析状态行,通过解析
位置:
头来处理
301
重定向响应,并建立一个新连接来请求提供给你的新URL。

sock.recv(4096)
将读取最多4096字节;这取决于已经到达的数据量以及调用实际可以返回的数据量。不能保证4096字节实际上可以一次性读取

在收到所有数据之前,您必须继续从套接字读取:

data = ''
chunk = sock.recv(4096)
while chunk:
    data += chunk
    if len(data) >= 4096:
        break
    chunk = sock.recv(4096)
您对
http://google.com/index.html
重定向到
www.google.com
,一个不同的主机名。相应地调整您的请求


如果你想实现一个完整的HTTP客户端,你必须解析状态行,通过解析
位置:
头来处理
301
重定向响应,并建立一个新的连接来请求提供给你的新URL。

edition.cnn.com使用HTTP/1.0,www.google.com使用HTTP/1.1。也许有人能插话告诉你该用哪一个

这适用于:www.google.com

import socket
import time

domain = 'www.google.com'
# must specify index.html for google
full_url = 'http://www.google.com/index.html'


mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.1\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
导入套接字
导入时间
域名='www.google.com'
#必须为google指定index.html
全文http://www.google.com/index.html'
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((域,80))
send('GET'+full_url+'HTTP/1.1\n\n')
尽管如此:
data=mysock.recv(512)
时间。睡眠(2.0)#2秒延迟
如果len(数据)<1:
打破
打印数据
mysock.close()
这适用于:edition.cnn.com

import socket
import time

domain = 'www.google.com'
# must specify index.html for google
full_url = 'http://www.google.com/index.html'


mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.1\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
警告:产量大;考虑调整ReV(512)到更大的数字或改变时间。睡眠(2)到1秒。

import socket
import time

domain = 'cnn.com'
full_url = 'http://edition.cnn.com/'

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
导入套接字
导入时间
域名='cnn.com'
全文http://edition.cnn.com/'
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((域,80))
send('GET'+full_url+'HTTP/1.0\n\n')
尽管如此:
data=mysock.recv(512)
时间。睡眠(2.0)#2秒延迟
如果len(数据)<1:
打破
打印数据
mysock.close()

两个进程都以退出代码0完成。edition.cnn.com使用HTTP/1.0,www.google.com使用HTTP/1.1。也许有人能插话告诉你该用哪一个

这适用于:www.google.com

import socket
import time

domain = 'www.google.com'
# must specify index.html for google
full_url = 'http://www.google.com/index.html'


mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.1\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
导入套接字
导入时间
域名='www.google.com'
#必须为google指定index.html
全文http://www.google.com/index.html'
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((域,80))
send('GET'+full_url+'HTTP/1.1\n\n')
尽管如此:
data=mysock.recv(512)
时间。睡眠(2.0)#2秒延迟
如果len(数据)<1:
打破
打印数据
mysock.close()
这适用于:edition.cnn.com

import socket
import time

domain = 'www.google.com'
# must specify index.html for google
full_url = 'http://www.google.com/index.html'


mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.1\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
警告:产量大;考虑调整ReV(512)到更大的数字或改变时间。睡眠(2)到1秒。

import socket
import time

domain = 'cnn.com'
full_url = 'http://edition.cnn.com/'

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((domain, 80))
mysock.send('GET ' + full_url + ' HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    time.sleep(2.0)     # 2 second delay
    if len(data) < 1:
        break
    print data

mysock.close()
导入套接字
导入时间
域名='cnn.com'
完整url=