首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示响应位置标头,包括是否有问号

显示响应位置标头,包括是否有问号
EN

Stack Overflow用户
提问于 2019-08-10 08:44:49
回答 1查看 337关注 0票数 0

对于Python请求,如何确定从服务器返回的位置标头的值?如果我有一个简单的the服务器

代码语言:javascript
运行
复制
from flask import Flask, Response, request

def root():
    return Response(headers={
        'location': 'http://some.domain.com/?'  # Note the ?
    })

app = Flask('app')
app.add_url_rule('/', view_func=root)

app.run(host='0.0.0.0', port=8081, debug=False)

然后跑

代码语言:javascript
运行
复制
import requests

response = requests.get('http://localhost:8081/', allow_redirects=False)
print(response.headers['location'])

我明白了

代码语言:javascript
运行
复制
http://some.domain.com/

/之后没有问号

这与Flask request: determine exact path, including if there is a question mark有关。我使用Python请求来测试返回重定向的应用程序,但我意识到请求正在从位置标头中删除尾随问号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-10 10:17:55

这是一个红鲱鱼:请求并没有从位置标头上去掉问号。如果将烧瓶服务器更改为返回两个完全相同的头,一个location和一个test

代码语言:javascript
运行
复制
def root():
    return Response(headers={
        'location': 'http://some.domain.com/?',  # Note the ?
        'test':     'http://some.domain.com/?',  # Note the ?
    })

我们通过套接字发出一个原始的HTTP请求

代码语言:javascript
运行
复制
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
sock.connect(('127.0.0.1', 8081))  

request = \
    f'GET / HTTP/1.1\r\n' \
    f'host:127.0.0.1\r\n' \
    f'\r\n'
sock.send(request.encode()) 
response = b''
while b'\r\n\r\n' not in response:
    response += sock.recv(4096)
sock.close()
print(response)

响应包含带有test?头。

代码语言:javascript
运行
复制
test: http://some.domain.com/?\r\n

但是没有location?

代码语言:javascript
运行
复制
Location: http://some.domain.com/\r\n

因此,似乎正在操作返回的位置标头的是Flask (或服务器中使用的其他组件之一)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57440682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档