Python模拟HttpRequest的方法总结



Python可以说是爬网的利器,本文主要介绍了一些python来模拟http请求的一些方法和技巧。

Python处理请求的类库有两个,urllib,urllib2。 这两个类库并不是一个类库的两个不同版本,urllib主要用来处理一些url相关的内容,发送请求的时候,请求对象只能是一个url。urllib2可以用request对象来实现请求,这样就可以实现如伪造头部,设置代理,http get,http post等方法。

阅读本文需要了解http请求的一些基本知识,如:

  • 什么是httpwebrequest,httpwebresponse
  • 什么是get,post
  • 什么是cookie

本文主要介绍模拟请求用到的这些方式:

  • 设置代理
  • 伪造头部或者Header信息
  • 启用cookie
  • url参数的处理

使用urllib2.urlopen直接发送

import urllib2

url = ‘http://www.baidu.com/‘
response = urllib2.urlopen(url) ##urlopen接受传入参数是string或者是request
response_text = response.read()

使用urllib.build_opener

直接发送请求

import urllib2

url = ‘http://www.baidu.com/‘

opener = urllib2.build_opener()
response = opener.open(url)
response_text = response.read()

通过代理访问站点

proxy_handler = urllib2.ProxyHandler({"http" : ‘http://localhost:8888‘})
opener = urllib2.build_opener(proxy_handler)
response = opener.open(url)
response_text = response.read()

请求中附带request body(http post)

opener = urllib2.build_opener()
response = opener.open(url,‘request body‘)
response_text = response.read()

body中如果是key-value形式的,可以参照下面的url处理部分来处理

启用Cookie

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(url)
response_text = response.read()

使用urllib2.Request

请求中添加自定义的Header信息

request = urllib2.Request(url)
request.add_data(‘1234567‘)
request.add_header(‘User-Agent‘, ‘fake-client‘)
response = urllib2.urlopen(request)

处理url中的参数信息

无论是使用get方式还是post方式,经常会遇到需要使用参数的形式,处理参数可以使用下面的类库

参数集合转string

para = {‘111‘:‘222‘,‘aaa‘:‘bbb‘}
encodeurl = urllib.urlencode(para)
输出aaa=bbb&111=222

url参数转dictionary

url = ‘https://www.baidu.com/s?wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3‘

splitresult_instance = urlparse.urlsplit(url)

输出对象:

SplitResult(scheme=‘https‘, netloc=‘www.baidu.com‘, path=‘/s‘, query=‘wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3‘, fragment=‘‘)

想转成集合只要

result_dic=urlparse.parse_qs(splitresult.query)

通过这种处理方式,把data信息放在url上来实现http get,放在body中实现http post。

此文同时托管在了 http://simmon.club/blog/Python-HttpRequest/

时间: 2024-12-25 05:25:21

Python模拟HttpRequest的方法总结的相关文章

Python模拟数据工具哪些比较好用

今天给大家推荐两款基本的Python模拟数据工具:mock和pytest monkeypatch. 为什么要模拟数据? 我们的应用中有一些部分需要依赖外部的库或对象.为了隔离开这部分,我们需要代替这些外部依赖,因而就用到了模拟数据.我们模拟外部的API来产生特定的行为,比如说返回符合之前定义的恰当的返回值. 模拟函数 我们有一个function.py的模块: 然后我们来看下如何将其与Mock库结合使用的: 这里发生了什么?1-4行是为了兼容python 2和3来引入的代码,在python 3中m

python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

1.参考 autopy (实践见最后一章节) 用Python制作游戏外挂(上) AutoPy Introduction and Tutorial autopy.mouse.smooth_move(1, 1) 可以实现平滑移动 autopy - API Reference pip install PyUserInput SavinaRoja/PyUserInput [python3.5][PyUserInput]模拟鼠标和键盘模拟 Python-模拟鼠标键盘动作 autoit selenium借助

python request属性及方法说明

if  request.REQUEST.has_key('键值'): HttpRequest对象的属性 参考: 表 H-1. HttpRequest对象的属性 属      性 描述 path 表示提交请求页面完整地址的字符串,不包括域名,如"/music/bands/the_beatles/". method 表示提交请求使用的HTTP方法.它总是大写的.例如: if request.method == 'GET': do_something() elif request.metho

浅析HTTP中POST和GET区别并用Python模拟其响应和请求

最近在几周在做手游崩溃信息收集和上传,拿到崩溃信息后,使用的是HTTP的POST方法上传到公司共用的服务器的,因此做简单总结.本文首先简单介绍了HTTP协议,主要说明了POST方法和GET方法的区别:然后用Python实现了 对POST方法和GET方法的响应:最后用Python模拟了POST方法和GET方法的请求. HTTP协议简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,简单来说它是一个应用层的协议,它允许将超文本标记语言(HTML)文档从W

[转] python程序的调试方法

qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val

【Python数据分析】Python模拟登录(一) requests.Session应用

最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学习所用. 登录特点:明文传输,有特殊标志数据 会话对象requests.Session能够跨请求地保持某些参数,比如cookies,即在同一个Session实例发出的所有请求都保持同一个cookies,而requests模块每次会自动处理cookies,这样就很方便地处理登录时的cookies问题.

python模拟163登陆获取邮件列表

利用cookielib和urllib2模块模拟登陆163的例子有很多,近期看了<python模拟登陆163邮箱并获取通讯录>一文,受到启发,试着对收件箱.发件箱等进行了分析,并列出了所有邮件列表及状态,包括发件人.收件人.主题.发信时间.已读未读等状态. 1.参考代码:http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html%EF%BB%BF 1 #-*- coding:UTF-8 -*- 2 import urll

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque