Fiddler是什么?
Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它仅仅暴露http通讯还有提供一个用户友好的格式。
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展。你对HTTP 协议越了解, 你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能帮助你了解HTTP协议。Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
Fiddler的工作原理
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。
Fiddler 下载安装
官网下载地址:http://www.telerik.com/fiddler
下载到本地,然后安装正常的安装流程执行。
Filddler安全证书安装
关闭Fiddler之后,下载并安装证书。
下载并安装Fiddler证书生成器。点击打开链接
设置Fiddler抓HTTPS请求
- Click Tools > Fiddler Options > HTTPS > Capture HTTPS CONNECTs > Decrypt HTTPS traffic这个时候会弹出一个窗口,直接确定,yes,就好。(一定要弹出那个窗口,不然,后面会有各种问题。)
之后点击Action按钮中的第一个选项,点击YES,
安装过程中遇到的问题:
安装之后,浏览器无法访问:直接报连接不是私密连接,查询各种方式,最终没有效果,还是这个问题,重装,但注意,要把已经存在的fiddler证书也彻底删除,
也可以尝试吧本地的Internet选项中进行配置:
最后运行代码的时候会产生SSLError的错误(关闭fiddler,运行正常,打开fiddler报错),代码及其错误如下:
# coding:utf-8
import requests
import re
import time
import random
# import json
import os
import getpass
import prettytable as pt
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]
stations = []
session = requests.session()
def get_header():
agent = user_agent_list[random.randint(0, len(user_agent_list) - 1)]
header = {
"User-Agent": agent,
"Accept": "*/*",
"Accept - Encoding": "gzip,deflate,br",
"Accept - Language": "zh-CN,zh;",
"q": "0.9",
"Cache - Control": "no-cache",
"Connection": "keep-alive",
"Host": "kyfw.12306.cn",
"Origin": "https://kyfw.12306.cn"
}
return header
def get_station():
station_url = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js"
response = session.get(station_url, headers=get_header())
stations_all = re.findall(u'([\u4e00-\u95fa5]+)\|([A-Z]+)', response.text)
global stations
stations = dict(stations_all)
print(stations)
get_station()
之后根据:https://blog.csdn.net/qq_33958297/article/details/82291009里面所说的方式进行尝试,但是我在我的证书里面没有找到fiddler的证书,(我重装fiddler好多次,过程当中删除过fiddler的证书,但不知道这次安装,证书到哪里了)所以直接从fiddler里面导出证书到桌面:Tools>Options>HTTPS>Actions>Ecpert Root Certifiction to DeskTop
修改之后的代码,和原来值修改了两处,其他没做修改
但是这个换了一个错误,我接着查找,发现直接将verify等于False即可。
原因:
运行代码的时候开着代理,改局域网设置之前不管选择GAEProxy、PAC代理还是取消全局代理都不行(忘了原来是怎么设的)。改了以后只要不选GAEProxy就不会报错。
查了一下发现GAE的局限性有“GAE出口IP被定义为'开放代理'部分网站屏蔽GAE的IP访问,或将其视为不信任”。大概是这个原因了,也是自己不懂瞎选造成的。也可能指定headers的User-Agent时,服务器会重定向到https的网址.因此报出SSL验证失败的错误