接口测试 request 库,接口请求 POST 报错

🍀あい🍀 · 2021年06月30日 · 最后由 🍀あい🍀 回复于 2021年07月27日 · 4635 次阅读

现象

1、request 请求 POST 接口的时候报错:

Traceback (most recent call last):
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/urllib3/connectionpool.py", line 588, in urlopen
    conn = self._get_conn(timeout=pool_timeout)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/urllib3/connectionpool.py", line 248, in _get_conn
    return conn or self._new_conn()
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/urllib3/connectionpool.py", line 826, in _new_conn
    raise SSLError("Can't connect to HTTPS URL because the SSL "
urllib3.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/urllib3/util/retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='xxx.xxx.cn', port=443): Max retries exceeded with url: /order/supplyOrder/xxx (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/zhangc/Desktop/GitTest/2020Project/Python/2020_02_Selenium_Python/Request/Test/20210619/test.py", line 23, in <module>
    r = requests.post(url,data)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/api.py", line 119, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='xxx.xxx.cn', port=443): Max retries exceeded with url: /order/supplyOrder/xxx (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))

2、请求头类型:

3、代码如下:

import requests
# import ssl

data = {
  "page": 1,
  "rows": 50,
  "status": 2,
  "recyclerId": 3882055230,
  "token": "eyJhbGciOiJIUzI1NiJ9.eyJyZWN5Y2xlck5hbWUiOlsi5ou-6LW35Y2W56eR5oqA5pyJ6ZmQ5YWs5Y-4Il0sInJvbGVJZCI6IjIxMCIsIm1hbnVmYWN0dXJlcklkIjpbIjEzODUwMjQ3NzEyIiwiMTM1NzAzOTQ5IiwiNzA2NDM2NDY4IiwiMjEzMjA1Mzg0IiwiNDkzNzA5MjgxIiwiNTY5NzEyMTk5IiwiNzU5NDY3NjkxIiwiMzU4NjA1MTk3IiwiMTEzODYyMjMxIiwiMTI3ODYyMDkzIiwiMTQ0MjkzNTIwIiwiMjIxNDIyOTI0IiwiMTIzNzUzMTMxIiwiMTMxNTE3MjIyIiwiMTM5MjYyMDg2IiwiMTQyNjk4ODI5IiwiMTQ5MDA5NDQzIiwiMTc1OTk4ODczIiwiMTg1MTgwNjk4IiwiMTk3ODM5NzQ3IiwiMjAxMzUzODEyMTEiLCI5Nzg0MDY1NTEiLCIxMDA5ODgzMDciLCIyOTQxNjkxOTQiLCIzODIwNzM0NjEiLCI4NTc3NTk5NDYiLCI5NDQ2OTM4MDA2IiwiMjg5MzU4NTk0IiwiNTUwODQyMTEyMCIsIjQzNDExNDQxOCIsIjEwMTAxMDEwMSIsIjA2OTI4MzQ5MDEiXSwidGVsZXBob25lIjoiMTc3Nzc3MDAwMjQiLCJzb3J0IjoxLCJ1c2VyTmFtZSI6Inh4d2J6YyIsInVzZXJJZCI6IjY2MzA1NzY4NTIiLCJyZWN5Y2xlcklkIjpbIjM4ODIwNTUyMzAiXSwidXNlckNvbXBhbnlOYW1lIjoi5ou-6LW35Y2W56eR5oqA5pyJ6ZmQ5YWs5Y-4IiwibG9naW5UaW1lIjoxNjI1MDE1OTcxOTAwLCJsb2dpbldheSI6MSwidXNlckNvbXBhbnlJZCI6IjM4ODIwNTUyMzAiLCJ1c2VyQ29tcGFueUlzU2VsZiI6MCwiYXV0aG9yaXR5Ijoi5YWo6YOo5p2D6ZmQIiwibmFtZSI6IuW8oOeVhSIsImxvZ2luU291cmNlIjotMSwidXNlckNvbXBhbnlUeXBlIjoiMiIsImV4cCI6MTYyNTA1OTE3MX0.SUeGjAANBz2f-gwv1Sr_zsmq-BAJOGto7sufKKGJ9YU"
}

url = "https://ecommercemodule.xxx.cn/order/supplyOrder/xxx"

r = requests.post(url,data)
print(r)
最佳回复
YXF 回复

查询了好多好像是版本问题,升级 python 版本到 3.7.0 终于好了,奇怪的是以前 3.6.1 版本没问题的,谢谢回答。

共收到 30 条回复 时间 点赞
🍀あい🍀 回复

升级或者降级都试一下,我印象中好像这么解决的,不确定了,你可以试试。按说拿出关键的报错信息百度或者 google 都应该能找到解决方法的

这个报错是,ssl 模块不可用。应该不是 requests 配置上的问题。可能是底层调用的 ssl 模块出问题了

应该是证书问题, 如楼上所说解决

yanderder 回复

加上了,还是报这个问题

KyleYao 回复

这个参数我加上了,verify=False,但是还是不行

connections.py 会 import ssl。如果 import 失败。就会设置 HTTPSConnection = DummyConnection。然后 ConnectionPool.py 里面

是不是同时开了 fiddler 这样的抓包工具😅

应该没这么麻烦,我遇到几次都是因为打开了 charles。

看本地有没没有打开代理,有代理关闭代理,没有的话,请求加上 header 试一试呢?

网上搜了个, 不知道可以用不. 加上 header
headers={'Connection':'close'}

参考:
https://www.jianshu.com/p/3a5993dd227d

驭我 回复

代理应该是没开,header 加上也不行

KyleYao 回复

谢谢大佬的回答,不过参照文章里的方法,还是不行

可以尝试一下重新安装 openssl

MarvinWu 回复

木有打开抓包工具😀

但是奇怪的是我木有打开任何抓包工具呢😀

用 postman 这些能请求吗

剪烛 回复

重新装过了,但是还是不行

咸鱼菜鸡 回复

postman 是可以的

落羽之梦 回复

您好,意思是我的 ssl 模块有问题吗?

urllib3.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.
根据报错,google 一下~

🍀あい🍀 回复

postman 可以但是 request 不行吗

咸鱼菜鸡 回复

是的,应该是环境的问题,同样代码在别人的环境就可以,我的环境就不行,但是我又不知道怎么解决

@🍀あい🍀 我也没碰到过这问题,百度的方案就是重装 openssl,如果不行,你可以直接修改里面的源码,一步步探具体怎么出错了

试试升级或者降级一下 requests 的版本,这问题之前依稀碰到过,忘了咋解决的了

YXF 回复

升级 python 吗

你的环境 Python 编译的时候没成功编译 SSL 模块吧,一般 SSL 模块都要配置打开的。你可以直接 python 输入 import ssl 看看。

testerzhang 回复

谢谢回答,之前用的时候挺好的,不知道中途做了什么操作不行的,现在已解决了,重新升级安装了一个 python3.7.0 版本的,原先是 3.6.1

YXF 回复

查询了好多好像是版本问题,升级 python 版本到 3.7.0 终于好了,奇怪的是以前 3.6.1 版本没问题的,谢谢回答。

Mac 升级 python 步骤:
①安装新的 py 版本

pyenv install 3.7.0

②指定版本

pyenv global 3.7.0

③修改配置文件

vim ~/.bash_profile

# py3.7.0
export PATH=/usr/local/var/pyenv/versions/3.7.0/bin:$PATH
alias python="/usr/local/var/pyenv/versions/3.7.0/bin/python3.7"

④修改生效

source ~/.bash_profile

⑤查看版本

python -V
🍀あい🍀 关闭了讨论 07月27日 11:39
🍀あい🍀 重新开启了讨论 07月27日 11:39

请求参数加个 verify=False

8楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册