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 · 315 天前 · 2109 次点击
    这是一个创建于 315 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司内网用 request get 某个接口,不通报错 WinError 10060 。
    对方说接口没有任何限制,本以为是公司内网屏蔽问题,但试了一下好像也不是,大家帮我分析一下。。。

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

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

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

    10060 是超时
    先检查连接建立了没有,没有的话可能性就多了,因为部分软件通了,我先想到的是防火墙
    rationa1cuzz
        10
    rationa1cuzz  
       315 天前
    我觉得是 win 防火墙或者代理导致的,建议找个 linux 机器试试
    gablic
        11
    gablic  
    OP
       315 天前
    @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  
       315 天前
    请求的时候添加 user-agent 试试
    gablic
        13
    gablic  
    OP
       315 天前
    @NoOneNoBody 应该是根本没有建立
    @rationa1cuzz linux 没条件,不过找了台很干净的 win 机器测试也一样
    @xiaoxuan6 加了,楼上有位兄弟建议,用能跑通 chrome 的头测试,在 Python 里就是不通
    SenLief
        14
    SenLief  
       315 天前
    大概率是被本机防火墙干掉了,你可以换一台电脑试试看。
    NoOneNoBody
        15
    NoOneNoBody  
       315 天前
    @gablic #13
    问个低能的问题:你的 python.exe 允许联网了吗?
    gablic
        16
    gablic  
    OP
       315 天前
    @NoOneNoBody #15 haha...百度还是可以通的
    doraf
        17
    doraf  
       315 天前
    @gablic 要不试试用 Wireshark 这种抓包看看,先在本机抓包,发现不了问题的话,再去服务端抓包看看。
    seers
        18
    seers  
       315 天前 via Android
    不知道 Python 有没有 socket 库,你可以 4/7 一层一层看过去
    hefish
        19
    hefish  
       315 天前
    应该在这边发帖的同时,问问公司网管有啥限制。。。不能放着眼前的不问。
    dearmymy
        20
    dearmymy  
       315 天前
    你 request 添加本机代理,用 fiddler 之类的抓包,跟 postman 对比下哪里不同。
    krixaar
        21
    krixaar  
       315 天前
    requests 会用系统环境变量 http_proxy 和 https_proxy ,如果有先删了再试
    XxxxD
        22
    XxxxD  
       315 天前
    http 2.0?
    undefind
        23
    undefind  
       314 天前
    postman 可以直接生成 python 代码,点右侧的这个符号</> 看看和自己写的有什么区别
    kkhaike
        24
    kkhaike  
       314 天前
    这种问题,抓包一下就能看出来
    gablic
        25
    gablic  
    OP
       311 天前
    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   ·   我们的愿景   ·   实用小工具   ·   2721 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 15:38 · PVG 23:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.