推荐学习书目
› 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 · May 18, 2023 · 4181 views
    This topic created in 1277 days ago, the information mentioned may be changed or developed.
    公司内网用 request get 某个接口,不通报错 WinError 10060 。
    对方说接口没有任何限制,本以为是公司内网屏蔽问题,但试了一下好像也不是,大家帮我分析一下。。。

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

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

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

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