免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3592 | 回复: 7
打印 上一主题 下一主题

python3 http编程求助。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-20 17:37 |只看该作者 |倒序浏览
python网络编程初次接触,怎么都弄不好啊感觉,求大神。

想用http.client模块来发送GET命令,如下:

GET http://public-ott-nodrm.verimatr ... &t=VOD&p=37 HTTP/1.1
Host: public-ott-nodrm.verimatrix.com:12684
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: __utma=109597698.709692872.1387240809.1392717232.1392789859.8; __utmz=109597698.1387240809.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wp4253="XVYWDs-lM-kim-TTvYTTTTTTW8nVs-TYCM:YYMDtlnDl-TXZK-UXTVDDDSSU-TUTLWBDSSU-TVZTYKDOLkptHmkpQ_Jht"

我照猫画虎如下:
import os,sys,urllib,socket
import http.client
conn = http.client.HTTPConnection('public-ott-nodrm.verimatrix.com',12684)
body = {'r':'gladiator1','t':'VOD','p':'37'}
headers = {"Host": "public-ott-nodrm.verimatrix.com:12684","Connection": "keep-alive","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
             "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36","Accept-Encoding": "gzip,deflate,sdch",
            "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6"}

conn.request('GET','/CAB/keyfile',body,headers)
r = conn.getresponse()
r.read()

似乎不对啊,求大神指点。



如果改用socket发送,还是不对,如下:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('public-ott-nodrm.verimatrix.com',12684))
msg = '''GET http://public-ott-nodrm.verimatr ... &t=VOD&p=37 HTTP/1.1 \n\n
                Host: public-ott-nodrm.verimatrix.com:12684\n
                Connection: keep-alive \n
                Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n  
                User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36\n
                Accept-Encoding: gzip,deflate,sdch\n
                Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\n
                Cookie: __utma=109597698.709692872.1387240809.1392717232.1392789859.8; __utmz=109597698.1387240809.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wp4253="XVYWDs-lM-kim-TTvYTTTTTTW8nVs-TYCM:YYMDtlnDl-TXZK-UXTVDDDSSU-TUTLWBDSSU-TVZTYKDOLkptHmkpQ_Jht\n"'''
msg = msg.encode()
sock.send(msg)
res = sock.recv(500)
print("%s" %res)

大神帮忙改改,不胜感激。

论坛徽章:
0
2 [报告]
发表于 2014-02-20 17:50 |只看该作者
帮顶                           

论坛徽章:
0
3 [报告]
发表于 2014-02-21 09:36 |只看该作者
你的http请求不合法,缺少结束的\r\n,先看一下http协议吧

论坛徽章:
0
4 [报告]
发表于 2014-02-21 10:05 |只看该作者
就是这个自定义头部不会写啊,有大侠给个例子不。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
5 [报告]
发表于 2014-02-21 11:50 |只看该作者
回复 4# qqrilxk
如果不想学习 HTTP 协议,最简单的办法:使用像 fiddler2 之类的工具,然后打开浏览器,在浏览器打开指定网页时,把对应的 HTTP 头信息保存下来。
如果使用的不是 IE,而是 Firefox,那就更简单了,使用下 firefox 插件->firebug,直接在浏览网页时找 http 信息就可以了。

论坛徽章:
0
6 [报告]
发表于 2014-02-21 12:40 |只看该作者
唉,没人帮忙啊,自己改了改,算是读出来了。如下:
import http.client

conn = http.client.HTTPConnection('public-ott-nodrm.verimatrix.com',12684)
body = {'r':'gladiator1','t':'VOD','p':'37'}
headers = {"Host": "public-ott-nodrm.verimatrix.com:12684","Connection": "keep-alive","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
             "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36","Accept-Encoding": "gzip,deflate,sdch",
            "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6"}
#body = urllib.urlencode(body)
conn.request('GET','/CAB/keyfile?r=gladiator1&t=VOD&p=37',None,headers)
r = conn.getresponse()
msg = r.read()
print("status:%s,%s" %(r.status,msg))

论坛徽章:
0
7 [报告]
发表于 2014-02-21 12:46 |只看该作者
只是,不太明白的是,读新浪首页怎么就那么简单就行,如下:‘
>>> conn = http.client.HTTPConnection('www.sina.com')
>>> conn.request('GET','/index.html')
>>> r = conn.getresponse()
>>> r.read()
b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<!--[5019,2,1] published at 2014-02-21 01:01:01 from #183 by system-->\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head>\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r\n<title>WWW.SINA.COM</title>\r\n<meta name="keywords" content="sina, \xe6\x96\xb0\xe6\xb5\xaa" />\r\n<meta name="description" content="\xe6\x96\xb0\xe6\xb5\xaa\xe9\xa6\x96\xe9\xa0\x81" />\r\n\n<style type="text/css">\r\n<!--\r\n/* basic setup */\r\nbody, 。。。。

论坛徽章:
0
8 [报告]
发表于 2014-02-21 13:14 |只看该作者
使用socket发送的问题也解决了。如下:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('public-ott-nodrm.verimatrix.com',12684))
msg = '''GET /CAB/keyfile?r=gladiator1&t=VOD&p=37 HTTP/1.1\n  \
        Host: public-ott-nodrm.verimatrix.com:12684\n  \
        Connection: keep-alive\n \
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n  \
        User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36\n  \
        Accept-Encoding: gzip,deflate,sdch\n  \
        Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\n  \
        Cookie: __utma=109597698.709692872.1387240809.1392717232.1392789859.8; __utmz=109597698.1387240809.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wp4253="XVYWDs-lM-kim-TTvYTTTTTTW8nVs-TYCM:YYMDtlnDl-TXZK-UXTVDDDSSU-TUTLWBDSSU-TVZTYKDOLkptHmkpQ_Jht\n\n'''
msg = msg.encode()
sock.send(msg)
res = sock.recv(1024)
print("%s" %res)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP