请教一个 Python Request 库的问题,兄弟们帮我分析一下,多谢了 - V2EX
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 3292 次点击
    这是一个创建于 960 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司内网用 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     Solana     1160 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 17:16 PVG 01:16 LAX 09:16 JFK 12:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86