欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-20 19:02:34
...

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


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

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

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 urllib2

proxy = 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 urllib2

proxy = 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 urllib
proxy_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 httplib
httpClient = 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 requests

proxies = {
  "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:aaa@qq.com/ 语法:

proxies = {
    "http": "http://user:aaa@qq.com: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())


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

测试一下:

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