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

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

现象

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 条回复 时间 点赞
🍀あい🍀 重新开启了讨论 07月27日 11:39
🍀あい🍀 关闭了讨论 07月27日 11:39

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
YXF 回复

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

testerzhang 回复

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

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

🍀あい🍀 回复

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

YXF 回复

升级 python 吗

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

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

咸鱼菜鸡 回复

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

🍀あい🍀 回复

postman 可以但是 request 不行吗

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

落羽之梦 回复

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

咸鱼菜鸡 回复

postman 是可以的

剪烛 回复

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

用 postman 这些能请求吗

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

MarvinWu 回复

木有打开抓包工具😀

可以尝试一下重新安装 openssl

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

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

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

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

KyleYao 回复

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

8楼 已删除
驭我 回复

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

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

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

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

KyleYao 回复

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

yanderder 回复

加上了,还是报这个问题

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

请求参数加个 verify=False

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