mingtdlb
V2EX  ›  Python

彦祖们,这个响应头的 location 怎么获取啊?

By mingtdlb at 2021 年 8 月 8 日 · 4051 次点击

RT,怎么获取 location 呀?求指教

login

[root@centos ~]# cat t.py
import requests
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62"
}
s = requests.session()
r = s.get('http://jd.com/',
headers=headers,
allow_redirects=False)
print (r.status_code)
r_url = r.headers["Location"]
print (r_url)

执行报错了

[root@centos ~]# python3 t.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
    response.begin()
  File "/usr/lib64/python3.6/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib64/python3.6/http/client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib64/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 756, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/local/lib/python3.6/site-packages/urllib3/packages/six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
    response.begin()
  File "/usr/lib64/python3.6/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib64/python3.6/http/client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib64/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "t.py", line 8, in <module>
    allow_redirects=False)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
[root@centos ~]#
14 条回复
tony9413
   1
tony9413  
   2021 年 8 月 8 日
日志上看 get 时候就报错了,程序走不到下面
Ptu2sha
   2
Ptu2sha  
   2021 年 8 月 8 日
..百度一下错误原因就知道连接被重置了 和你代码获取无关
mingtdlb
   3
mingtdlb  
OP
   2021 年 8 月 8 日
@Ptu2sha ?上面写了啊,被对方重置了。我的意思是要怎么解决
Cusmate
   4
Cusmate  
   2021 年 8 月 8 日
代码获取方式没问题,你要解决的是什么问题?
initd
   5
initd  
   2021 年 8 月 8 日
s = sessions.Session()

更好的写法是
r = requests.get

我们可能不是同一个版本的 requests,所以多看文档
toaruScar
   6
toaruScar  
   2021 年 8 月 8 日
截图里面请求的不是 22.22.22.22 ,而是 jd.com ?
你可以试试看在浏览器里请求 jd.com ,成功之后把浏览器请求时用了的 headers 全抄过去
mingtdlb
   7
mingtdlb  
OP
   2021 年 8 月 8 日
@Cusmate 想要拿到响应头 location 的值,目的是拿到 location 值中的 token 值
Cusmate
   8
Cusmate  
   2021 年 8 月 8 日
@mingtdlb 建议直接用 curl,简单又快捷
Dockerfile
   9
Dockerfile  
   2021 年 8 月 9 日
@initd 更好的写法?。。你不会是不知道 session 啥意思吧
muzuiget
   10
muzuiget  
   2021 年 8 月 9 日
链接被重置,本来就连不上,换个 url 吧。
mingtdlb
   11
mingtdlb  
OP
   2021 年 8 月 9 日
@muzuiget
@toaruScar
这个认证,在浏览器中,就是随便使用一个 url,只要不是 https 的都行,然后他会自动跳转到认证页面。认证服务器并没有给当独的认证地址。
mingtdlb
   12
mingtdlb  
OP
   2021 年 8 月 9 日
@Cusmate 开始使用 curl 发 HEAD 请求的,但是也是直接给我重置了...
Cusmate
   13
Cusmate  
   2021 年 8 月 9 日
不清楚了,我把你的 python 代码原样复制下来执行是没问题的,确实是其它原因导致网络请求中断。
Dockerfile
   14
Dockerfile  
   2021 年 8 月 9 日
你自己的网络问题吧,我试了下正常的啊
推荐学习书目
› 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
© 2026 V2EX · 41ms · 3.9.8.5