V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
gablic
V2EX  ›  Python

请教一个 Python Request 库的问题,兄弟们帮我分析一下,多谢了

  •  
  •   gablic · 2023-05-18 16:13:32 +08:00 · 2486 次点击
    这是一个创建于 560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司内网用 request get 某个接口,不通报错 WinError 10060 。
    对方说接口没有任何限制,本以为是公司内网屏蔽问题,但试了一下好像也不是,大家帮我分析一下。。。

    外网环境:
    无论是 postman 还是 python ,都能正常通。

    内网环境:
    可以通:Postman ,PowerShell ,Chrome
    不通:Edge ,Python Request

    到底啥原因啊,是不是公司内网屏蔽了。。
    25 条回复    2023-05-22 09:36:17 +08:00
    doraf
        1
    doraf  
       2023-05-18 16:46:51 +08:00
    telnet 服务器端口,看能建立链接不。浏览器访问这接口,看看啥效果。判断判断哪个环节有问题。
    doraf
        2
    doraf  
       2023-05-18 16:48:15 +08:00
    对不起,我没看仔细。。我错了。
    doraf
        3
    doraf  
       2023-05-18 16:50:45 +08:00
    Python Requests 构造跟 Chrome 这种浏览器发出的相同的请求,试试呢?
    gablic
        4
    gablic  
    OP
       2023-05-18 16:59:32 +08:00
    @doraf #3 一样呢,加上 header 也不行。。我感觉应该是网络问题,但内网 postman 又可以通,无从下手。。
    oldsix2
        5
    oldsix2  
       2023-05-18 17:00:37 +08:00
    python 程序里 curl 请求下试试
    knva
        6
    knva  
       2023-05-18 17:06:27 +08:00   ❤️ 2
    一眼系统代理
    doraf
        7
    doraf  
       2023-05-18 17:06:52 +08:00
    @gablic 要不抓包看看有何不同?
    maybedk
        8
    maybedk  
       2023-05-18 17:10:15 +08:00
    首先,这个库叫 Requests 。之前有人用不带 s 的发起过恶意混淆。它有默认的请求头,会不会是被拦截了?另外还需要注意请求地址是不是 https 。requests 发送 ssl 请求需要 verify=False
    可以再试试 httpx 这个库?
    NoOneNoBody
        9
    NoOneNoBody  
       2023-05-18 17:15:09 +08:00
    edge 不通有点不解

    10060 是超时
    先检查连接建立了没有,没有的话可能性就多了,因为部分软件通了,我先想到的是防火墙
    rationa1cuzz
        10
    rationa1cuzz  
       2023-05-18 17:18:58 +08:00
    我觉得是 win 防火墙或者代理导致的,建议找个 linux 机器试试
    gablic
        11
    gablic  
    OP
       2023-05-18 17:25:17 +08:00
    @oldsix2 我试了下 pycurl 这个库,不行: (28, "Failed to connect to xxxx port 80 after 21178 ms: Couldn't connect to server")
    @knva 确实有可能,公司内网会有一些屏蔽策略,但我疑惑的是为什么 postman 能通
    @maybedk 抱歉没说清,是 requests ,http ,请求头应该是干净的,而且对方说对请求头没有限制。代码 po 上来吧:
    import requests
    url = 'http://xxxx'
    response = requests.get(url)
    print(response.text)
    TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
    xiaoxuan6
        12
    xiaoxuan6  
       2023-05-18 17:26:28 +08:00
    请求的时候添加 user-agent 试试
    gablic
        13
    gablic  
    OP
       2023-05-18 17:30:28 +08:00
    @NoOneNoBody 应该是根本没有建立
    @rationa1cuzz linux 没条件,不过找了台很干净的 win 机器测试也一样
    @xiaoxuan6 加了,楼上有位兄弟建议,用能跑通 chrome 的头测试,在 Python 里就是不通
    SenLief
        14
    SenLief  
       2023-05-18 17:31:11 +08:00
    大概率是被本机防火墙干掉了,你可以换一台电脑试试看。
    NoOneNoBody
        15
    NoOneNoBody  
       2023-05-18 17:37:40 +08:00
    @gablic #13
    问个低能的问题:你的 python.exe 允许联网了吗?
    gablic
        16
    gablic  
    OP
       2023-05-18 17:43:02 +08:00
    @NoOneNoBody #15 haha...百度还是可以通的
    doraf
        17
    doraf  
       2023-05-18 17:46:39 +08:00
    @gablic 要不试试用 Wireshark 这种抓包看看,先在本机抓包,发现不了问题的话,再去服务端抓包看看。
    seers
        18
    seers  
       2023-05-18 17:55:17 +08:00 via Android
    不知道 Python 有没有 socket 库,你可以 4/7 一层一层看过去
    hefish
        19
    hefish  
       2023-05-18 17:58:04 +08:00
    应该在这边发帖的同时,问问公司网管有啥限制。。。不能放着眼前的不问。
    dearmymy
        20
    dearmymy  
       2023-05-18 17:58:30 +08:00
    你 request 添加本机代理,用 fiddler 之类的抓包,跟 postman 对比下哪里不同。
    krixaar
        21
    krixaar  
       2023-05-18 18:01:20 +08:00
    requests 会用系统环境变量 http_proxy 和 https_proxy ,如果有先删了再试
    XxxxD
        22
    XxxxD  
       2023-05-18 23:25:20 +08:00
    http 2.0?
    undefind
        23
    undefind  
       2023-05-19 04:50:19 +08:00
    postman 可以直接生成 python 代码,点右侧的这个符号</> 看看和自己写的有什么区别
    kkhaike
        24
    kkhaike  
       2023-05-19 14:34:11 +08:00
    这种问题,抓包一下就能看出来
    gablic
        25
    gablic  
    OP
       2023-05-22 09:36:17 +08:00
    1. 公司确实有一些网络限制,问了 IT 不知道具体,但原因基本就是这个没跑了。主要疑点是为什么 postman 可以,python request 不可以。
    2. 加了个内部的 http 代理后就好了,侧面验证了是公司内网封锁。
    3. 根据大家建议,用 fiddler 抓包看了下,postman 没有任何 header 。
    4. 就在我用 fiddler 抓 python request 包的时候,我惊讶的发现这次居然通了。我什么都没做,代码什么都没改,双缝实验般的恐怖感。。。
    5. Python request 会默认带 header:User-Agent: python-requests/2.28.1 ,之前试过修改也无效,结合上一条和 header 应该关系不大。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:49 · PVG 07:49 · LAX 15:49 · JFK 18:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.