【fiddler】如何使用fiddler抓取python请求

来源:互联网 发布:mac的dock怎么设置 编辑:程序博客网 时间:2024/05/16 14:38

使用 Fiddler 可以很容易抓取到从浏览器发出的 http 请求,然而在使用程序模拟 http 请求时,fiddler 抓取不到发送的这些请求,解决方法:就是在程序中添加代理。


开启fiddler后浏览器中所有访问几乎都可以在fiddler查看到与之对应的http请求,由此可以判断程序所构造的http 请求是否正确。对于python请求的抓取,只需设置成 127.0.0.1:9988 即可;需要一个代理来对网络请求进行过滤展示:


Python程序中设置HTTP代理,下面以 Python 发送http 请求为例说明:


urllib2/urllib 库的代理设置:

urllib2是Python标准库,功能很强大,只是使用起来稍微麻烦一点。在Python 3中,urllib2不再保留,迁移到了urllib模块中。urllib2中通过ProxyHandler来设置使用代理服务器。

Python 可以直接用 urllib2 发送http请求:

urllib2.urlopen("http://www.csdn.com")

这样发的请求使用 fiddler 抓不到;


添加代理的方法:

import urllib2proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8888'})opener = urllib2.build_opener(proxy)response = opener.open('http://wwww.csdn.com')print response.read()

也可以用install_opener将配置好的opener安装到全局环境中,这样所有的urllib2.urlopen都会自动使用代理。

import urllib2proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8888'})opener = urllib2.build_opener(proxy)urllib2.install_opener(opener)response = urllib2.urlopen('http://wwww.csdn.com')print response.read()

在Python 3中,使用urllib。

import urllibproxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:8888/'})opener = urllib.request.build_opener(proxy_handler)r = opener.open('http://www.csdn.com')print(r.read())

httplib库的代理设置:

解决方法如下:

import httplibhttpClient = httplib.HTTPConnection("127.0.0.1",8888,timeout = 30)

requests库的代理设置(官网):

requests是目前最优秀的HTTP库之一,也是我平时构造http请求时使用最多的库。它的API设计非常人性化,使用起来很容易上手。给requests设置代理很简单,只需要给proxies设置一个形如 {'http': 'x.x.x.x:8080', 'https': 'x.x.x.x:8080'} 的参数即可。其中http和https相互独立。如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:

import requestsproxies = {  "http": "http://10.10.1.10:3128",  "https": "http://10.10.1.10:1080",}requests.get("http://example.org", proxies=proxies)

你也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理。

$ export HTTP_PROXY="http://10.10.1.10:3128"$ export HTTPS_PROXY="http://10.10.1.10:1080"$ python>>> import requests>>> requests.get("http://example.org")

若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法:

proxies = {    "http": "http://user:pass@10.10.1.10:3128/",}

要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。

proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}

注意,代理 URL 必须包含连接方式。

可以直接设置session的proxies属性,省去每次请求都要带上proxies参数的麻烦。

s = requests.session()s.proxies = {'http': '127.0.0.1:9988'}print(s.get('http://httpbin.org/ip').json())


***************************************************************************************************

测试一下: