linux Charles 抓包配置 和二级代理 和 charles + pycharm + request 配置

linux chrome导入Charles 证书

导出 Charles 证书

help -->  ssl proxy --> Save Charles Root Certificate --> Desktop/charles.pem

mv charles.pem charles.crt

certutil 证书管理工具 for Chrome 和 Firefox

安装certutil,一个命令行式证书管理相关工具
sudo apt-get install libnss3-tools

利用certutil导入证书
certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n charles -i ~/Desktop/charles.crt

 

导入到 Linux 系统

sudo  cp ~/Desktop/charles.crt /usr/share/ca-certificates/mozilla/charles.crt

把 mozilla/charles.crt 加入到 ca-certificates.conf 文件末尾

sudo vim /etc/ca-certificates.conf

sudo update-ca-certificates

 

配置二级代理

Tools --> Import/Export Settings ... --->Export --->  uncheck select all ---> check Access Control +  Proxy Settings + External Proxies --> Export --> Done !

<?charles serialisation-version='2.0' ?>
<charles-export>
<proxyConfiguration>
<transparentProxy>true</transparentProxy>
<sslLocations>
<locationPatterns>
<locationMatch>
<location>
<host>*</host>
<port>*</port>
</location>
</locationMatch>
</locationPatterns>
</sslLocations>
<socksTransparentHTTPProxyPorts/>
<socksTransparentHTTPProxyPortRanges/>
</proxyConfiguration>
<accessControlConfiguration>
<ipRanges>
<ipRange>
<ip>
<int>10</int>
<int>10</int>
<int>10</int>
<int>236</int>
</ip>
<mask>
<int>255</int>
<int>255</int>
<int>255</int>
<int>255</int>
</mask>
</ipRange>
</ipRanges>
</accessControlConfiguration>
<externalProxyConfiguration>
<configurations>
<entry>
<string>socks</string>
<mutableExternalProxyConfiguration>
<active>true</active>
<host>192.168.1.1</host>
<port>1080</port>
<domain/>
<username/>
<encryptedPassword>Sr8xTCy3aLdwYzYc1xxmEQ==</encryptedPassword>
</mutableExternalProxyConfiguration>
</entry>
<entry>
<string>http</string>
<mutableExternalProxyConfiguration>
<host>192.168.1.1</host>
<port>1080</port>
<domain/>
<username/>
<encryptedPassword>Sz62CibQSZ5P0PJ3CwqJAw==</encryptedPassword>
</mutableExternalProxyConfiguration>
</entry>
<entry>
<string>https</string>
<mutableExternalProxyConfiguration>
<host>192.168.1.1</host>
<port>1080</port>
<domain/>
<username/>
<encryptedPassword>b4Eg/j68uJdadLEfvogaYw==</encryptedPassword>
</mutableExternalProxyConfiguration>
</entry>
</configurations>
<bypassDomains>
<string>192.168.1.0/24</string>
<string>10.10.10.0/24</string>
</bypassDomains>
<enabled>true</enabled>
</externalProxyConfiguration>
<clientSSLCertificatesConfiguration/>
</charles-export>

pycharm + request 配置 

import requests

# 开启charles,运行pycharm发送https请求报以下错误
import urllib3
urllib3.disable_warnings()



# 创建一个 Session 对象
session = requests.Session()

head = {
    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}

data = {
    "cname": "",
    "pid": "",
    "keyword": "上海",
    "pageIndex": 1,
    "pageSize": 10
}

# 代理地址
proxy = {
    'http': 'http://10.10.10.236:8888',
    'https': 'http://10.10.10.236:8888'
}


# 请求 URL
url = "https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"

# 发送请求时,加上verify=False,即可解决
# 发送请求
response = session.post(url=url, headers=head, data=data,
                         proxies=proxy,
                         verify=False
                         )


# 检查响应状态码是否为 200
# if response.status_code == 200:
#     try:
#         # 尝试解析 JSON 响应内容
#         data = response.json()
#         print(data)
#     except ValueError:
#         # 如果解析失败,打印警告信息
#         print("警告:响应内容为空或不是有效的 JSON 格式。")
# else:
#     # 如果响应状态码不是 200,打印错误信息
#     print("请求失败,状态码:", response.status_code)

page_content = response.json()
# page_content = response.text
#
print(page_content)

for dic in page_content["Table1"]:
    name = dic["storeName"]
    addr = dic["addressDetail"]
    print(name,addr)